Laravel 4 принадлежитToMany Relationship Returns Empty

Я использую 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), он добавит соответствующую строку в сводную таблицу, чтобы знать, что связь существует.

Есть идеи, почему кажется, что запросы не работают?


person Steven Quinn    schedule 28.09.2014    source источник


Ответы (1)


Это просто способ получить доступ к своим отношениям. Вместо этого попробуйте сделать следующее:

$organisations = User::find(1)->organisations;

$users = Organisation::find(1)->users;

Если вы используете версию отношения с методом, вы также можете добавить в запрос дополнительные элементы. Но будьте осторожны, вам нужно добавить к нему суффикс get(), чтобы фактически выполнить запрос.

// The same as just accessing the property
$organisations = User::find(1)->organisations()->get();

// With extra clauses
$organisations = User::find(1)->organisations()->where('created_at', '>=', '2010-01-01 00:00:00')->get();
person Dwight    schedule 29.09.2014
comment
Это здорово, спасибо! Я знал, что это будет что-то простое. - person Steven Quinn; 29.09.2014