Я использую Laravel 4, и мне сложно установить отношения "многие ко многим". Вот пример того, что я пытаюсь сделать. Здесь я пытаюсь установить отношения "многие ко многим" между пользователем и организацией.
Вот мой файл миграции, создающий таблицу пользователей, таблицу организаций и сводную таблицу для перехода между ними.
public function up()
{
Schema::create('users', function(Blueprint $table)
{
$table->increments('id');
$table->string('email');
$table->string('password');
$table->timestamps();
});
Schema::create('organizations', function(Blueprint $table)
{
$table->increments('id');
$table->string('name');
$table->timestamps();
});
Schema::create('organization_user', function(Blueprint $table)
{
$table->increments('id');
$table->integer('organization_id')->unsigned()->index();
$table->foreign('organization_id')->references('id')->on('organizations')->onDelete('cascade');
$table->integer('user_id')->unsigned()->index();
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
$table->timestamps();
});
}
Я также использовал модель User по умолчанию и добавил отношение ownToMany.
use Illuminate\Auth\UserTrait;
use Illuminate\Auth\UserInterface;
use Illuminate\Auth\Reminders\RemindableTrait;
use Illuminate\Auth\Reminders\RemindableInterface;
class User extends Eloquent implements UserInterface, RemindableInterface {
use UserTrait, RemindableTrait;
/**
* The database table used by the model.
*
* @var string
*/
protected $table = 'users';
/**
* The attributes excluded from the model's JSON form.
*
* @var array
*/
protected $hidden = array('password', 'remember_token');
public function organizations()
{
return $this->belongsToMany('Organization');
}
}
И я создал модель организации, в которой отношения идут в противоположном направлении.
class Organization extends \Eloquent {
protected $fillable = ['name'];
public function users()
{
return $this->belongsToMany('User');
}
}
Проблема в том, что если я пытаюсь выполнить запрос с помощью User :: find (1) -> organization (), конечно, после добавления данных образца он всегда возвращается как пустой массив, и то же самое касается противоположного направления с использованием организации :: найти (1) -> пользователи (). Странно то, что если я попытаюсь сделать что-то вроде Organization :: find (1) -> users () -> attach (1), он добавит соответствующую строку в сводную таблицу, чтобы знать, что связь существует.
Есть идеи, почему кажется, что запросы не работают?