Я хочу использовать фильтр select () для получения столбцов как из основной модели, так и из связанной модели, которую я загружаю с помощью функции with (), но я не нашел общего ответа о том, как это должно происходить Работа. Результатом этого должен быть список, который можно загрузить в компоненте select2.
Допустим, у меня есть две модели: провинция и страна, а у провинции есть внешний ключ для страны (country_id); в модели эта взаимосвязь описывается с принадлежностью (провинция-> страна ()) и hasMany (страна-> провинция ()). Это работает, но мне это не нравится, потому что это не просто решение Eloquent (выходной массив называется $ data):
$result = Province::with('country')
->where ( 'provinces.name', 'LIKE', '%' . $search . '%' )
->limit(25)
->get();
foreach ($result as $res) {
$data[] = ['id' => $res->id, 'text' => $res->name." - ".$res->country->name];
}
Это работает, но создает массив с вложенным объектом для каждой строки.
$result = Province::with('country')
->where ( 'provinces.name', 'LIKE', '%' . $search . '%' )
->limit(25)
->get();
Это не так, потому что не может найти столбец country.name
$result = Province::with('country')
->where ( 'provinces.name', 'LIKE', '%' . $search . '%' )
->limit(25)
->select('provinces.id', DB::raw('CONCAT(provinces.name," ", country.name) AS text'))
->get();
Я также попытался с помощью select / addSelect в анонимной функции в with () , как я читаю в других ответах. Как правильно получить массив с объединенными полями из родительской и дочерней модели?
Спасибо!