Как отобразить данные из разных таблиц данных? Отношение один ко многим - PullRequest
0 голосов
/ 27 апреля 2020

Итак, у меня есть модель, у которой есть много загруженных видео. Model и models_videos - это разные таблицы. Мне нужно отображать видео с каждой модели на основе их идентификатора.

ModelController:

 public function index() 
    {
        $models = NewModel::all();

        $model_video = NewModelVideos::all();

        return view('admin.model_new_videos.index')
        ->with('models', $models)
        ->with('model_video', $model_video);

    }

Модели

 class NewModel extends Model
    {
 protected $table = 'models';

    protected $guarded  = ['id'];

    protected $sortable = ['id', 'name', 'about'];

    public function videos()
        {
            return $this->hasMany('App\Models\NewModels\NewModelVideos','model_id' ,'id');
        }
    }


    class NewModelVideos extends Model
    {
        use Sortable;

        protected $table = 'models_videos';

        protected $guarded  = ['id'];

        protected $sortable = ['id', 'model_id', 'title', 'video'];

        public function model()
        {
        return $this->belongsTo('App\Models\NewModels\NewModel', 'id');
        }   

    }

И просмотр:

@foreach($model_video as $model)

    <h1>{{ $model->title }} </h1>
        {{ $model->video }}   

@endforeach 

Я не могу получить видео, которое относится к указанному * Модель 1013 *. Извините, я новичок и все еще учусь

1 Ответ

0 голосов
/ 27 апреля 2020

Я думаю, вы должны указать столбец, который относится к NewModel:

class NewModelVideos extends Model
    {
        use Sortable;

        protected $table = 'models_videos';

        protected $guarded  = ['id'];

        protected $sortable = ['id', 'model_id', 'title', 'video'];

        public function model()
        {
        return $this->belongsTo('App\Models\NewModels\NewModel', 'id', 'model_id'); //<-- here
        }   

    }

Если вы не указали foreign key для моделей: вот что говорит документ One To One

Кроме того, Eloquent предполагает, что внешний ключ должен иметь значение, соответствующее столбцу id (или пользовательскому столбцу $ primaryKey) родительского элемента. Другими словами, Eloquent будет искать значение столбца id пользователя в столбце user_id записи Phone. Если вы хотите, чтобы отношения использовали значение, отличное от id, вы можете передать третий аргумент методу hasOne, указав ваш пользовательский ключ:

return $this->hasOne('App\Phone', 'foreign_key', 'local_key');

Это означает, что вы можете сделать это следующим образом. кстати тоже:

class NewModelVideos extends Model
    {
        use Sortable;

        protected $table = 'models_videos';

        protected $guarded  = ['id'];

        protected $sortable = ['id', 'model_id', 'title', 'video'];

        public function model()
        {
        return $this->hasOne('App\Models\NewModels\NewModel', 'id', 'model_id'); //<-- here
        }   

    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...