Преобразование sql-скрипта в красноречивый

недавно я использую PHP Laravel с PostgreSQL, и я не знаю, как преобразовать этот sql-скрипт в красноречивый.

SELECT v_extensions.extension, 
( 
    SELECT COUNT(v_xml_cdr.uuid) FROM v_xml_cdr WHERE v_xml_cdr.extension_uuid = v_extensions.extension_uuid AND start_stamp >= @startDate AND end_stamp <= @endDate
) 
FROM v_extensions ORDER BY count DESC LIMIT 1

Я пытаюсь сделать что-то подобное, но не знаю, как мне написать, что extension_uuid из XmlCdr равен extension из Extension. Также эти столбцы не связаны внешним ключом в базе данных.

$call = Extension::select('extension', function(){
        XmlCdr::where('extension_uuid', )
    })->limit(10)->get();

нашел способ как это сделать с DB::select

$query = 'SELECT v_extensions.extension, (SELECT COUNT(v_xml_cdr.uuid) FROM v_xml_cdr WHERE v_xml_cdr.extension_uuid = v_extensions.extension_uuid) FROM v_extensions LIMIT 1';
$result = DB::select($query);

Почему бы вам вместо этого не использовать \DB::raw()?

azisuazusa 18.04.2018 13:05

@AzisAbdulBachar Я сделал что-то вроде этого `$ all = DB :: table ('v_extensions') -> select ('extension, (SELECT COUNT (v_xml_cdr.uuid) FROM v_xml_cdr WHERE v_xml_cdr.extension_uuid = extension_uuid AND @ start_stampate> AND @ start_stampate> end_stamp <= @endDate) ') -> получить (); `но он выдает ошибку там, где я использую точку ('.')

Ertan Hasani 18.04.2018 13:26

@AzisAbdulBachar сделал это с помощью DB :: select ()

Ertan Hasani 18.04.2018 14:05
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
3
278
1

Ответы 1

Во-первых, Eloquent - это ORM. Чтобы использовать его, вам нужно будет создать модель (ы), которая расширяет модель Eloquent документы модели и определяет отношения между ними. документы по отношениям

Предположим, вы это сделали, у вас должно получиться что-то вроде этого:

class ExtensionCDR extends \Illuminate\Database\Eloquent\Model
{
    protected $primaryKey = "uuid";      // primary key column name
    protected $table      = "v_xml_cdr"; // by default Eloquent assumes your table has the same name as the class - more or less

    // add relations like
    public function extensions()
    {
        return $this->hasMany(Extensions::class); //further parameters may needed - see docs
    }
}

class Extensions extends \Illuminate\Database\Eloquent\Model
{
     protected $table = "v_extensions";

     // add relations
}

С его помощью вы можете сделать это (в основном где угодно): (Я не уверен, в какой таблице есть соответствующие временные метки)

// this is the case where the timestamps are on the related model
$result = ExtensionCDR::whereHas('extensions', function ($query) use($start, $end) {
    return $query->whereDate('start_stamp', '>', $start)
                 ->whereDate('start_stamp', '<', $end);
})->get();

Я понимаю, что это не будет идеальный ответ (копия / макароны), но я надеюсь, что он направит вас в правильном направлении; Если я вас полностью не понял, просто используйте модуль базы данных с необработанными запросами, например: сырые вещи

Да, но внутри этого $ query-> whereDate () должен быть другой where ('extensionId', EXTENSIONID из модели ExtensionCDR). И я не знаю, как набрать этот EXTENSIONID из ExtensionCDR

Ertan Hasani 19.04.2018 12:37

эта часть обрабатывается отношением, она определяется этими fkeys, и они используются по умолчанию; в основном при использовании whereHas ограничения внешнего ключа вставляются dewfault в фоновом режиме

zedling 20.04.2018 17:40

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