Выберите поля из загруженной модели - PullRequest
2 голосов
/ 18 февраля 2020

Я хочу использовать фильтр 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 () , как я читаю в других ответах. Как правильно получить массив с объединенными полями из родительской и дочерней модели?

Спасибо!

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