似乎查询构建器以错误的顺序绑定参数。
这是我的问题:
$query = DB::table('jobs');
$query->whereIn( 'status_id', $status_array);
$this_query->leftjoin( 'attribute_text_data', function($join) use ( $attribute_id, $attribute_value ){
$join->on( 'jobs.job_id', '=', 'attribute_text_data.job_id' )
->where( 'attribute_id', '=', $attribute_id )
->where( 'attribute_value', '=', $attribute_value );
});
当我运行它时,我注意到没有返回正确的结果。所以我输出原始查询,看起来参数没有按正确的顺序绑定:
select distinct `jobs`.`job_id` as `job_id`, `job_title`, `job_due_date`, `status_id`, `assigned_to_contact_id`, `jobs`.`account_id`, `billing_account_id`, `attribute_text_data`.`attribute_value` as `attribute_value_text`
from `jobs` left join `attribute_text_data`
on `jobs`.`job_id` = `attribute_text_data`.`job_id`
and `attribute_id` = ?
and `attribute_value` = ?
where `status_id` in (?, ?, ?, ?)
[bindings] => Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
[4] => 4 ( attribute_id )
[5] => hourly (attribute_value )
)
似乎首先将状态添加到查询中,它的参数首先添加到绑定数组。然后添加了属性绑定。但似乎重新排列了查询,并且没有按正确的顺序访问参数。
这是一个错误,还是我的查询语法有问题?
注意 - 将查询的状态部分移动到属性部分是很困难的,但可以作为最后的手段来完成。我认为应该正确应用绑定,而不是试图解决。