2015-08-12 2 views
1

У меня проблемы с отношениями Laravel 5. У меня есть 2 модели Crew и Event с соответствующими таблицами crews и events. У экипажей много событий, а в мероприятиях есть один экипаж. Я создал свои модели и миграции следующим образом:Laravel 5 - Доблестные отношения, возвращающие пустую коллекцию

схемы:

//Crews 
    Schema::connection('scheduling')->create('crews', function ($table) { 
      $table->increments('id'); 
      $table->text('name'); 
      $table->boolean('solo'); 
      $table->boolean('active'); 
      $table->text('phone'); 
     }); 

     //Events 
     Schema::connection('scheduling')->create('events', function ($table) { 
      $table->increments('id'); 
      // ... 
      $table->integer('crew_id')->unsigned(); 
      $table->foreign('crew_id')->references('id')->on('crews'); 
      $table->text('notes'); 
      // ... 
      $table->timestamps(); 
     }); 

Модели:

namespace App\Models\Scheduling; 

use Illuminate\Database\Eloquent\Model; 

class Crew extends Model { 

    public $connection = "scheduling"; 
    public $table = "crews"; 

    public function events() { 
     return $this->hasMany('App\Models\Scheduling\Event', 'id', 'crew_id'); 
    } 

    public static function active() { 
     return Crew::where('active', 1)->get(); 
    } 

} 

namespace App\Models\Scheduling; 

use Illuminate\Database\Eloquent\Model; 

class Event extends Model { 

    public $connection = "scheduling"; 
    public $table = "events"; 

    public function crew() { 
     return $this->belongsTo('App\Models\Scheduling\Crew', 'crew_id', 'id'); 
    } 

} 

Если я бегу Crew::find(102)->events; я в конечном итоге с пустой коллекции. Если я запустил Events::where('crew_id', 102)->get();, я в итоге приведу список событий, которые я ожидал. Любая идея, что я делаю неправильно здесь?

ответ

1

Ваше отношение к событиям недействительно - вы передаете аргументы в неправильном порядке.

Заменить:

return $this->hasMany('App\Models\Scheduling\Event', 'id', 'crew_id'); 

с

return $this->hasMany('App\Models\Scheduling\Event', 'crew_id', 'id'); 

или просто

return $this->hasMany('App\Models\Scheduling\Event'); 

, как вы используете значения по умолчанию для имен столбцов, поэтому нет необходимости передавать их в определение отношения.

+0

Первоначально я использовал его как ваш предложенный метод, но это не работало для меня, поэтому я попробовал то, что у меня есть. Я попробую еще раз через несколько минут, чтобы быть уверенным. –

+0

Ну, я не знаю, что это за волшебство вуду, но его работа. Я клянусь, что у меня была такая настройка, как изначально, но, должно быть, у меня было что-то еще не так. В любом случае, спасибо! –

Смежные вопросы