Laravel 5.5 запрос (подзапрос) - PullRequest
0 голосов
/ 01 апреля 2020

Пожалуйста,

У меня есть:

Таблицы:

  • реклама
  • ad_settings
  • special_sections

таблица: объявления (среди прочих):

  • id (9)
  • title

таблица: ads_settings (среди прочих):

  • id (45)
  • ad_id (9)
  • is_active

таблица: special_sections (среди прочих):

  • id (1)
  • ad_setting_id (45)
  • name

В моем контроллере у меня есть:

$ad = AdSetting::with(["ad" => function($q){
    $q->where('ad_id', '=', 'id');
}])->pluck('ad_id', 'id' );

Сказанное выше дает мне:

Collection {#14946 ▼
  #items: array:14 [▼
    9 => 45
  ]
}

dd ($ ad) дает мне "id объявления" (9) и "ad_setting id" (45)

Я изо всех сил пытаюсь сорвать идентификатор объявления (45) с заголовком объявления . Нужен ли мне еще один (внутренний) запрос?

Я действительно запутался, может кто-нибудь дать какой-нибудь совет. Спасибо.

Ответы [ 2 ]

0 голосов
/ 01 апреля 2020
$ad = AdSetting::with(["ad" => function($q){
    $q->where('ad_id', '=', 'id');
}])->get(['ad_id', 'id', 'title']); // you can only selects 'ads_settings' column

если вы объявляете отношения между ad и ad_settings (не уверен, какой тип отношений. Я предполагаю, что hasMany <-> belongsTo)

вы нужно посмотреть, какое отношение есть у документа

, вы можете просто сделать

$ad = AdSettings::with('ad')
    ->get(['ad_id', 'id', 'title'])
    ->toArray();
0 голосов
/ 01 апреля 2020

Мне нужно увидеть больше кода, чтобы увидеть, как выглядит ваша модель, но я предполагаю, что у вас есть модель с именем AdSetting, где у вас есть отношения, определенные так:

public function ad() {
    return $this->belongsTo('App\Ad');
}

Для того, чтобы Получив все настройки добавления с соответствующими заголовками объявлений, вы можете сделать что-то вроде этого:

$ads = AdSetting::with('ad')->get()->pluck('ad.title', 'id');

Это должно дать вам коллекцию всех настроек объявления, ключ которых равен столбцу идентификатора AdSetting и Результатом будет название объявления.

[
    1 => 'ad title',
    2 => 'some other ad title',
    //...
]
...