А как вывести конкретное поле? Оно выводит весь массив. В интернете примеры с
Но с select выводит просто []. Пробовал так же в Модель, в методе "salaries" через select, то же самое.
Когда используешь select с отношениями, нужно добавлять ID модели для большинства видов отношений, иначе работать не будет. Для belongsTo() вместо ID модели, нужно добавить внешний ключ, иначе тоже пустой объект вернет.
select() тебе позволит убрать лишнее из ответа, если захочешь вывести само значение, итерируй по модели и используй first(), чтобы вернуть объект коллеции. Ну а потом делаешь ->value для того, чтобы достать необходимое значение.
Например, если ты хочешь "достать" одного работника с его зарплатой и хочешь использовать код
@AmdY (немного неверный синтаксис, поправил ниже), то можно сделать что-то подобное:
Код:
$employee = Employee::with(['salaries' => function($q) {
$q->latest()->take(1);
}])->find($id);
// Работаешь с объектом, который содержит коллекцию:
$value = $employee->salaries->first()->value;
find() достает объект. Если используешь get() или paginate(), то тогда итерируй работников и только потом "доставай" зарплаты.
Имей ввиду, что этот код достанет только одну первую попавшуюся зарплату и ты не можешь его использовать для "достать одну последнюю зарплату для каждого работника".
Если тебе нужна value для одного работника, лучше сделать так в модели Salary:
Код:
public function getLastValueByEmployeeId($id) {
return $this->where('employee_id', $id)->latest()->first()->value;
}
Замени value на название нужного столбца.
Либо в модели Employee:
Код:
public function getLastSalaryValueByEmployee($employeeObject) {
return $employeeObject->salaries()->latest()->first()->value;
}
Но только если в текущем запросе нужно достать данные для одного работника.