@artem_atlas

Как правильно получить элементы из БД на сегодня в Laravel 8?

Добрый день, мне нужно получить элеметы из БД на сегодня при помощи Carbon.
Есть 3 таблицы: districts, addresses, orders. Вот их модели:
class Districts extends Model
{
    use HasFactory;
    protected $primaryKey = 'id';
    protected $guarded = [];

    public function address()
    {
        return $this->hasMany('App\Models\Addresses', 'district_id', 'id');
    }
}

class Addresses extends Model
{
    use HasFactory;

    protected $guarded = [];

    public function orders()
    {
        return $this->hasMany('App\Models\Orders', 'address_id', 'id');
    }

    public function district()
    {
        return $this->belongsTo('App\Models\Districts', 'district_id', 'id');
    }
}

class Orders extends Model
{
    use HasFactory;

    protected $guarded = [];

    protected $searchable = [
        'name',
    ];

    public function address()
    {
        return $this->belongsTo('App\Models\Addresses', 'address_id', 'id');
    }
}

В таблице Orders есть столбец $table->date('date_of_completion'); который отображает на какую дату создан заказ. Мне нужно получить все districts где orders date_of_completion будет равен сегодняшнему дню.
А это одня из моих попыток получения:
$districts = Districts::where(function($ds)
        {
            $ds->address->where(function ($addr)
            {
                $addr->orders->whereDate('date_of_completion', Carbon::today());
            });
        })->get();

Уточню: Нужно получить все Orders, у которых есть Addresses, у которых есть Orders, у которых поле date_of_completion должно быть равно сегодняшнему дню.
  • Вопрос задан
  • 111 просмотров
Решения вопроса 1
@Kostik_1993
Web Developer
Бздец. Доку сначала поучите. ООП. Мозг включите, а потом шлепайте свой говнокод.

Все это написано неправильно. Для начала поучите как правильно составлять запросы. Потом уже с датой разберетесь
$districts = Districts::where(function($ds) {
            $ds->address->where(function ($addr)
            {
                $addr->orders->whereDate('date_of_completion', Carbon::today());
            });
        })->get();


Подсказка вместо where используйте whereHas
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы