Laravel Получить данные из таблицы отношений отношений и выбрать столбец?

У меня 3 стола

Таблица пользователей

+----+-------+----------+
| id | email | password |
+----+-------+----------+
| 1  | 1     | John     |
+----+-------+----------+

Таблица user_details

+----+--------------------+------------+-----------+
| id | user_id [FK_users] | first_name | last_name |
+----+--------------------+------------+-----------+
| 1  | 1                  | John       | Kevin     |
+----+--------------------+------------+-----------+

Таблица сообщений

+----+--------------------+----------+
| id | user_id [FK_users] | title    |
+----+--------------------+----------+
| 1  | 1                  | 1st Post |
+----+--------------------+----------+

Теперь я уже создал все отношения в моделях, и теперь я могу получить доступ к таблице user_details с помощью нижеприведенного красноречивого запроса, который возвращает всю таблицу пользователей и таблицу user_details, но я хочу выбрать только first_name и last_name из таблицы user_details, как мне это сделать?

$posts= Post::with('city:id,name_en', 'user.userDetail')->where('id', $id)->get();

person Ahamed    schedule 01.10.2018    source источник
comment
значит, вы хотите избавиться от user таблицы, верно?   -  person Tharaka Dilshan    schedule 01.10.2018
comment
Нет, я хочу получить доступ к столбцу first_name и last_name таблицы user_details (в таблице user_details я не добавил больше столбцов) через отношения user.userDetail, в настоящее время он возвращает целые столбцы из user_details и таблицы пользователей   -  person Ahamed    schedule 01.10.2018
comment
попробуйте с (['city: id, name_en', 'user.userDetail' = ›function ($ query) {$ query-› select ('first_name', 'last_name', 'id')}]);   -  person Fatemeh Majd    schedule 01.10.2018
comment
@fatemehMajd возвращает null для user_detail   -  person Ahamed    schedule 01.10.2018
comment
это потому, что user_id должен быть в запросе выбора, поскольку это внешний ключ. вот почему результат был нулевым   -  person Tharaka Dilshan    schedule 01.10.2018
comment
@TharakaDilshan, спасибо, что он работает, но возвращает всю таблицу пользователей, не можем ли мы выбрать только идентификатор из таблицы пользователей или вообще ничего не выбрать?   -  person Ahamed    schedule 01.10.2018
comment
@FatemegMajd Спасибо, это спасло меня, я заменил id на user_id, теперь он работает, но возвращает всю таблицу пользователей, не можем ли мы выбрать только идентификатор из таблицы пользователей или вообще ничего не выбирать?   -  person Ahamed    schedule 01.10.2018
comment
вы просто не хотите выбирать адрес электронной почты и пароль, верно?   -  person Fatemeh Majd    schedule 01.10.2018
comment
@fatemehMajd Да, конечно   -  person Ahamed    schedule 01.10.2018
comment
хорошо, кто-то ответил на это. Я сам озадачился :-D   -  person Fatemeh Majd    schedule 01.10.2018
comment
@fatemehMajd Большое спасибо за ваши усилия, кто-то ответил ниже ...   -  person Ahamed    schedule 01.10.2018


Ответы (1)


это получит все атрибуты 'post', 'user' id, 'user_details' user_id, first_name, last_name

$posts= Post::with([
    'city:id,name_en',
    'user' => function ($query) {
        $query->select('id');
    },
    'user.userDetail' => function($query) {
        $query->select(['user_id', 'first_name', 'last_name']);
    }
])->where('id', $id)->get();
person Tharaka Dilshan    schedule 01.10.2018
comment
Как в этом случае получить только несколько атрибутов из сообщения или установить псевдоним для нескольких столбцов в сообщении? - person Brainy Prb; 24.05.2020
comment
получить только несколько атрибутов: Post::with(bla bla bla)->select([field_name1, field_name2])->where(bla bla bla);. Не забудьте включить необходимые внешние ключи при выборе. - person Tharaka Dilshan; 25.05.2020