Я работал с запросом, который должен считать элементы разных комбинаций в группе связанных таблиц.
Структуры:
imageviews
----------
-imageId
-productId
-time
-browser
-os
clicks
------
clickId
imageId
time
downloads
---------
downloadId
clickId
time
Если я использую Eloquent с активной загрузкой и группирую по двум полям, я вижу отношение «щелчок», но не могу подсчитать результаты каждой комбинации каждой пары «браузер» и «ОС».
>>> $deliveries = App\Delivery::with('clicks')->groupBy('browser','os')->get();
Я пытался объединить количество запросов с помощью Eloquent, но безуспешных результатов. Например, я добавил три модели («Просмотр изображений», «Клик», «Загрузки»), в которых я определяю отношения.
ImageView.php
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class ImageView extends Model
{
public $timestamps = false;
protected $primaryKey = 'imageId';
protected $keyType = 'string';
public $incrementing = false;
protected $fillable = ['imageId', 'product_id', 'time', 'browser', 'os', 'site'];
public function clicks()
{
return $this->hasMany(Click::class, 'imageId', 'imageId');
}
}
Click.php
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Click extends Model
{
public $timestamps = false;
protected $primaryKey = 'clickId';
protected $keyType = 'string';
public $incrementing = false;
protected $fillable = ['deliveryId', 'clickId', 'time'];
public function imageview()
{
return $this->belongsTo(App\ImageView::class, 'imageId', 'imageId');
}
public function downloads()
{
return $this->hasMany(App\Install::class, 'clickId', 'clickId');
}
}
download.php
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Download extends Model
{
public $timestamps = false;
protected $fillable = ['downloadId', 'clickId', 'time'];
public function click()
{
return $this->belongsTo(App\Install::class, 'clickId', 'clickId');
}
}
Моя цель - создать JSON, который генерирует такой результат:
{
"interval": {
"start": "2018-01-07T14:30:00+0000",
"end": "2018-01-07T18:20:00+0000" },
"data": [ {
"fields": {
"browser": "Chrome",
"os": "Android"
}, "stats": {
"imageviews": 10,
"clicks": 4,
"downloads": 1
}
},
{
"fields": {
"browser": "Safari",
"os": "iOS"
},
"stats": {
"imageviews": 2,
"clicks": 1,
"downloads": 1
}
},
{
"fields": {
"browser": "Chrome",
"os": "iOS"
}
"stats": {
"imageviews": 15,
"clicks": 5,
"downloads": 3
} }
]
}
Как я могу получить это? Я рад предоставить дополнительную информацию, если это необходимо.