Eloquent ORM:具有相同变量

时间:2015-10-23 19:41:39

标签: php laravel eloquent

有没有办法使用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       |         
     --------------------------------   


我错过了什么?

2 个答案:

答案 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是一个比示例中提供的查询更长的查询,这似乎很有用。