Необработанный SQL для Eloquent

Не могли бы вы помочь мне преобразовать этот SQL-запрос в Eloquent:

SELECT item.id, hired.item_id, hired.quantity - item.quantity as quanity 
FROM items item 
join hireds hired on hired.item_id = item.id 
WHERE item.quantity > hired.quantity 
order by item.id;

можете ли вы предоставить нам скриншот структуры таблицы

Johhn 14.03.2019 01:00

Знание схемы для соответствующих данных было бы полезно

kentwait 14.03.2019 04:20

пожалуйста, поделитесь структурой таблицы и объясните, чего вы пытаетесь достичь

ManojKiran Appathurai 14.03.2019 05:08
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
1
3
244
5

Ответы 5

Это может выглядеть примерно так

DB::table('items')
    ->join('hireds', 'items.id', '=', 'hireds.item_id')
    ->select('item_id', 'quantity')
    ->where('items.quantity', '>', 'hireds.quantity')
    ->get()->sortBy('id');

Не уверен на 100%, как обрабатывать конфликтующие имена атрибутов.

Вы можете создать запрос с необработанным в laravel: -

$query = DB::table('work_times as wt')
                ->join('work_time_details as wtd', 'wt.work_time_id','=','wtd.work_time_id')
                ->where('admin_id', $employee_id)
                ->whereBetween('work_time_date', [$start_date, $end_date])
                ->groupBy('wtd.project_id')
                ->orderBy('wtd.project_id')
                ->select(
                    DB::raw('sum(work_time_detail_hrs) as total_hour'),
                    'wtd.work_time_detail_id',
                    'wtd.project_id',
                    'wtd.work_type_id',
                    'work_types.work_type_name',
                    'p.project_name'
                )
                ->get()
                ->toArray();

Для этого вам нужно было использовать класс DB:

use Illuminate\Support\Facades\DB;

Предполагая, что ваши модели Item и Hire, добавьте следующее отношение к модели Hire.

public function item(){
    return $this->belongsTo(Item::class);
}

И в контроллере

$model = Hire::with('item')->get();

Вы можете использовать whereHas().

   Item::with('hireds')->whereHas('hireds',function($q){
        $q->whereRaw('items.quantity>hireds.quantity');
    })->get();

ИЛИ

Item::join('hireds','items.id','=','hireds.item_id')
    ->selectRaw('items.quantity - hireds.quantity as quantity')
    ->whereRaw('items.quantity>hireds.quantity')->get();

Спасибо всем за вашу помощь. Я достиг этого следующим образом:

$hireds = Hired::query()->select('item.id', 'hired.item_id')
            ->selectRaw('hired.quantity - item.quantity as quanity')
            ->from('items as item')
            ->rightJoin('hireds as hired', 'hired.item_id', '=', 'item.id')
            ->whereRaw('item.quantity < hired.quantity')
            ->groupBy('bill_id')->select('bill_id')
            ->selectRaw('count(*) as items, sum(hired.price) as price')
            ->get();

Другие вопросы по теме