Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Есть таблицы
users
id - integer
name - string
order_users
id - integer
user_id - integer
day_id - integer
amount - integer
order_days
id - integer
date - date
отношения
class User extends Model
{
public function orders() {
return $this->hasMany('App\Models\OrderUser', 'user_id');
}
}
...
class OrderUser extends Model
{
public function day() {
return $this->belongsTo('App\Models\OrderDay', 'day_id', 'id');
}
public function user() {
return $this->belongsTo('App\User', 'user_id', 'id');
}
}
Вопрос: мы получили всех пользователей с именем Иван:
$users = \App\User::where('name', 'Иван')->get();
Как теперь для каждого из них получить общую сумму, за работу с 1.09 по 3.09?
Не в сети
Я бы сделал через Constraining Eager Loads
https://laravel.com/docs/5.5/eloquent-relationships
$users = App\User::with(['posts' => function ($query) {
$query->where('title', 'like', '%first%');
}])->get();
И ты на выходе получишь группу объектов юзеров с доп полем заработок и конкретно суммой для каждого....
Изменено adams (14.09.2017 16:32:34)
Не в сети
Дело в том, что мне нужно в шаблоне по каждой дате потом выводить сумму заработка, чтобы срабатывало вот так примерно:
$user->days->filter(function ($day) {return $day->date == '2017-09-01';})->users->sum('amount')
Есть еще одно отношение
class User extends Model
{
public function days() {
return $this->belongsToMany('App\Models\OrderDay', 'order_users', 'user_id', 'day_id');
}
Не в сети
Ну так в доп поле к каждому юзеру например test может лежать массив где ключ это дата, а значение - заработок.
Не в сети
А зачем ты дату хранишь в отдельной таблице, если там отношение belongsTo? Храни дату в order_users (намного лучше переименовать в orders) и получай данные:
$users = \App\User::where('name', 'Иван')
->with(['orders' => function ($q) use ($from, $to) {
$q->whereBetween('date', [$from, $to]);
}])
->get();
Ну а для текущей структуры, можно сделать так:
$users = \App\User::where('name', 'Иван')
->with(['orders' => function ($q) use ($from, $to) {
$q->whereHas('day', function ($q) use ($from, $to) {
$q->whereBetween('date', [$from, $to]);
});
}])
->get();
Изменено AlexeyMezenin (14.09.2017 18:29:21)
Не в сети
Страницы 1