Как получать новости по идентификатору модели? - PullRequest
2 голосов
/ 07 ноября 2019

У меня есть страницы профиля для каждой модели с моего сайта, но мне нужно получать по каждому профилю новости с model_id на основе идентификатора моей модели.

У меня есть 3 таблицы:

  1. модели - Id, Title, Phone, Number,
  2. новости - Id, Title, 'Slug',
  3. news_models - Id, News_id, Models_id.

Вот мой контроллер

public function modelSingle($slug)
{

    // return $slug;
    // return Redirect::back();

    $data = $this->data;

    $data['model'] = Models::with('category_name','model_media')->where('slug','=',$slug)->first();
    $data['news'] = DB::table('news_models')->where('models_id', '=', 'news_id')->get(); // THIS IS WHAT I'VE TRIED TO DO
    dd($data['news']);
    $username = $data['model']->instagram;
    if($username)
    {
        $raw = file_get_contents('https://www.instagram.com/'.$username);
        preg_match('/\"edge_followed_by\"\:\s?\{\"count\"\:\s?([0-9]+)/',$raw,$m);
        $data['followed_by'] = $m[1];
    }else{
        $data['followed_by'] = "";
    }

    // print intval($m[1]);
    // print_r($m);
    // die;
    if(count($data['model']) == 0)
    {
        abort(404);
    }

    $data['model_images'] = ModelMedia::where([["type", "=", 1],["model_id", "=", $data['model']->id]])->orderBy('sort')->get();

    $data['model_image'] = ModelMedia::where([["type", "=", 1],["tag", "=", 1],["model_id", "=", $data['model']->id]])->orderBy('sort')->get();
    $data['model_campaign'] = ModelMedia::where([["type", "=", 1],["tag", "=", 2],["model_id", "=", $data['model']->id]])->orderBy('sort')->get();
    $data['model_show'] = ModelMedia::where([["type", "=", 1],["tag", "=", 3],["model_id", "=", $data['model']->id]])->orderBy('sort')->get();

    $data['model_videos'] = ModelMedia::where([["type", "=", 2],["model_id", "=", $data['model']->id]])->get();
    $data['model_video'] = ModelMedia::where([["type", "=", 2],["tag", "=", 1],["model_id", "=", $data['model']->id]])->get();
    $data['video_campaign'] = ModelMedia::where([["type", "=", 2],["tag", "=", 2],["model_id", "=", $data['model']->id]])->orderBy('sort')->get();
    $data['video_show'] = ModelMedia::where([["type", "=", 2],["tag", "=", 3],["model_id", "=", $data['model']->id]])->get();

    $data['model_gif'] = ModelMedia::where([["type", "=", 3],["tag", "=", 1],["model_id", "=", $data['model']->id]])->get();
    // $data['model_gif'] = ModelMedia::where([["type", "=", 3],["model_id", "=", $data['model']->id]])->get();
    $data['gif_campaign'] = ModelMedia::where([["type", "=", 3],["tag", "=", 2],["model_id", "=", $data['model']->id]])->get();
    $data['gif_show'] = ModelMedia::where([["type", "=", 3],["tag", "=", 3],["model_id", "=", $data['model']->id]])->get();

С помощью dd($data['model']); я получаю все данные из таблицы models, но я не знаю, как добавить их в мой $data['news'] и назначить правильные новости для идентификатора модели.

Итак, если я на /models/anna, я хочу получить новости, которые выделены для models_id (из news_models).

1 Ответ

1 голос
/ 07 ноября 2019

Похоже, у вас есть Has Many Through отношение.

В Модель Модель:

public function news()
{
  return $this->hasManyThrough('App\News', 'App\Model');
}

В контроллере:

$model = Models::with('category_name','model_media')->where('slug', $slug)->first();
$news = $model->news;

Отношениядокументация: https://laravel.com/docs/5.8/eloquent-relationships

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