У меня есть модель Notifications, которая принадлежит к User. Я хочу загружать пользователя, когда выбрана коллекция уведомлений, и загружать только модель с names и emails. Однако при использовании метода select запрос возвращает значение null.
$notifications->load(['user' => function($query){
$query->select(["name","email"]);
}]);
Если параметр для метода select() указан ниже, он дает все поля:
$notifications->load(['user' => function($query){
$query->select(["*"]
}]);
Есть ли конкретная причина, по которой вы используете $ notifications вместо модели уведомлений?
если у вас уже есть коллекция, которую вы не можете использовать → загрузить в этой коллекции, по крайней мере, метод загрузки не отображается в доступных методах коллекции документов laravel laravel.com/docs/5.6/eloquent-collections#available-methods
@GaimZz Это неправда: laravel.com/docs/5.6/eloquent-relationships#lazy-eager-loadi ng
ммм вижу спасибо: D
Активная загрузка работает только при выборе столбца внешнего ключа (id).
@GaimZz модель уведомления вводится через сервисный контейнер. Кстати, есть ли разница в нетерпеливой загрузке?
@GaimZz Активная загрузка работает, но основная проблема здесь - это выделенная часть.
@BirendraGurung, если мой ответ не работает, вы можете попробовать сделать свой выбор следующим образом-> $ query-> select (["id", "name", "email"]), потому что, как указано в документации laravel, при использовании это вы всегда должны выбирать идентификатор, хотите вы или нет
@JonasStaudenmeir Да, решением было добавление первичного ключа к параметру. Все, что я сделал, это добавил столбец первичного ключа (в моем случае: ID), и в моем случае это сработало.


Возможно, выбор таких полей сработает:
$notifications->load('user:id,name,email');
То, что вы пытаетесь, предназначено для добавления ограничений, а не для выбора некоторых полей
он не будет работать с замыканиями, когда вам нужно добавить некоторые ограничения к вашему запросу.
Просто нужно было добавить столбец первичного ключа, и это сработало.
$notifications->load(['user' => function($query){
$query->select(["ID","name","email"]);
}]);
Таким образом, в запрос можно добавить любые ограничения.
Если у вас все наоборот, вам нужно включить внешний ключ: $user->load(['notifications' => function($q){ $q->select(['user_id', 'message']); }]);, потому что id не работает.
Вы должны передать внешний ключ, если вы выбираете данные с помощью select. Взглянуть
public function index()
{
$employee = Employee::with(['pay_salary' => function($query){
$query->select(['employee_id','salary_amount'])
->whereMonth('paying_date',\Carbon\Carbon::now()->month);
},'getSalary:id,employeeID,salary'])->get();
return View::make('admin.salary.index',['data' => $employee]);
}
Просто вопрос: почему бы вам выбрать при активной загрузке? Если вы хотите отфильтровать результаты для ответа, вы можете добавить
protected $hidden = []в свою модель.