【发布时间】:2018-03-19 23:23:35
【问题描述】:
我一直在尝试将以下查询转换为雄辩的模型查询/原始数据库查询。我对 laravel 的了解有限,我已经停下来了。
select
status,
(SELECT count(*) FROM active_call_statuses WHERE active_call_id = 'CA3a77245ab0eac10f8cf3aa8e7c8f9a91') AS total
from
active_call_statuses
left JOIN
active_calls ON active_calls.parent_call_id = active_call_statuses.active_call_id
where
status IN('in-progress', 'completed', 'ringing', 'answered', 'busy', 'failed', 'no-answer')
and
active_calls.parent_call_id = 'CA3a77245ab0eac10f8cf3aa8e7c8f9a91'
查询的目的是选择具有给定呼叫状态的所有列,并通过子查询中的 id 计算与当前呼叫关联的状态条目的总数。
据我所见,该查询在 mysql 中完成了它应该做的事情,但我不知道如何将其转换为雄辩的查询。
active_call_statuses 表和 active_calls 表分别通过 eloquent 中的 parent_call_id 上的一对多关系相互链接。
class ActiveCall extends Model
{
/**
* @var mixed
*/
public $timestamps = false;
/**
* @var array fillable properties
*/
protected $fillable = ['user_id', 'conference_id', 'parent_call_id'];
/**
* @return mixed
*/
public function statuses()
{
return $this->belongsToMany('app\ActiveCallStatus');
}
}
class ActiveCallStatus extends Model
{
/**
* @var bool timestamps enabled
*/
public $timestamps = false;
/**
* @var array fillable properties
*/
protected $fillable = ['active_call_id', 'user_id', 'status'];
/**
* @return mixed
*/
public function activeCall()
{
return $this->belongsTo('app\ActiveCall');
}
}
我尝试使用DB::raw 将查询包装在DB::select 中,通过将参数绑定到selectRaw aliased with :id 来使用DB->table(...)->selectRaw(...) .etc 方法调用表,但一切都导致数据库错误invalid parameter number 或其他错误。
这是我最后一次尝试:
processedUsers = DB::table('active_call_statuses')->select(
DB::raw("
SELECT
user_id,
status,
(SELECT count(*) FROM active_call_statuses WHERE active_call_id = :id) AS total
FROM
active_call_statuses"),
['id' => $activeCall->parent_call_id])
->whereIn('status',"('in-progress', 'completed', 'ringing', 'answered', 'busy', 'failed', 'no-answer')")
->where("active_calls.parent_call_id", $activeCall->parent_call_id);
导致:
[2018-03-19 12:33:45] local.ERROR: Invalid argument supplied for foreach() {"exception":"[object] (ErrorException(code: 0): Invalid argument supplied for foreach() at C:\\wamp64\\www\\Stage\\LanthopusX\\voip\\vendor\\laravel\\framework\\src\\Illuminate\\Database\\Query\\Builder.php:763)
【问题讨论】:
-
您在
\DB中使用的是原始 SQL 查询的包装器。 Eloquent 映射模型。它们不是一回事 -
我知道,但我想做的是摆脱
\DB并将其映射到 eloquent 模型。但现在查询根本不起作用。无论是使用\DB还是将其转换为雄辩的模型都没关系,我希望它能够工作,最好是作为雄辩的模型。但如果它返回数据我很高兴