有没有办法使用Eloquent检索类似查询的结果?假设您希望first_column
在三个查询中具有相同的值,但second_column
为这些查询的三个不同值。
实施例
$query = Model::where('first_column', '=', $something);
list($value, $diff_value, $another_diff_value) = [1, 2, 3];
// This is where I would like the results to diverge.
$one = $query->where('second_column', '=', $value)->get();
$two = $query->where('second_column', '=', $diff_value)->get();
$three = $query->where('second_column', '=', $another_diff_value)->get();
预期成果:
$one | first_column | second_column | $two | first_column | second_column | $three | first_column | second_column |
-----+--------------+---------------+ ------+--------------+---------------+ --------+--------------+---------------+
| 1 | 1 | | 1 | 2 | | 1 | 3 |
|--------------|---------------| |--------------|---------------| |--------------|---------------|
| 1 | 1 | | 1 | 2 | | 1 | 3 |
|--------------|---------------| |--------------|---------------| |--------------|---------------|
| 1 | 1 | | 1 | 2 | | 1 | 3 |
|--------------|---------------| |--------------|---------------| |--------------|---------------|
| 1 | 1 | | 1 | 2 | | 1 | 3 |
|--------------|---------------| |--------------|---------------| |--------------|---------------|
| 1 | 1 | | 1 | 2 | | 1 | 3 |
-------------------------------- -------------------------------- --------------------------------
实际结果:
$one | first_column | second_column | $two | empty $three | empty
-----+--------------+---------------+
| 1 | 1 |
|--------------|---------------|
| 1 | 1 |
|--------------|---------------|
| 1 | 1 |
|--------------|---------------|
| 1 | 1 |
|--------------|---------------|
| 1 | 1 |
--------------------------------
我错过了什么?
答案 0 :(得分:0)
是的,您需要完成每个查询。我知道你要做什么,自己尝试 - 它应该在纸上工作。但事实并非如此。
所以只需使用3个查询。没办法。
$first = 'alwaysTheSame';
$second = [1,2,3];
$data1 = Model::where('first', '=', $first)->where('second', '=', $second[0])->get();
$data2 = Model::where('first', '=', $first)->where('second', '=', $second[1])->get();
$data3 = Model::where('first', '=', $first)->where('second', '=', $second[2])->get();
快乐的编码!
答案 1 :(得分:0)
我明白了。这可以完成,但您需要克隆$query
。使用Laravel的with
辅助函数进行链接也很有帮助:
$query = Model::where('first_column', '=', $something);
list($value, $diff_value, $another_diff_value) = [1, 2, 3];
// This is where I would like the results to diverge.
$one = with(clone($query))->where('second_column', '=', $value)->get();
$two = with(clone($query))->where('second_column', '=', $diff_value)->get();
$three = with(clone($query))->where('second_column', '=', $another_diff_value)->get();
如果$query
是一个比示例中提供的查询更长的查询,这似乎很有用。