недавно я использую 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);
@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) ') -> получить (); `но он выдает ошибку там, где я использую точку ('.')
@AzisAbdulBachar сделал это с помощью DB :: select ()






Во-первых, 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
эта часть обрабатывается отношением, она определяется этими fkeys, и они используются по умолчанию; в основном при использовании whereHas ограничения внешнего ключа вставляются dewfault в фоновом режиме
Почему бы вам вместо этого не использовать
\DB::raw()?