doulangxun7769 2015-10-23 19:41
浏览 57
已采纳

Eloquent ORM:具有相同变量的类似查询

Is there any possible way to retrieve the results of similar queries using Eloquent? Say you would like first_column to be the same value in three queries, but second_column to be three different values for those queries.

Example:

$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();


Expected results:

$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       |
     --------------------------------         --------------------------------           --------------------------------


Actual results:

$one | first_column | second_column |   $two | empty   $three | empty
-----+--------------+---------------+   
     |       1      |       1       |         
     |--------------|---------------|         
     |       1      |       1       |         
     |--------------|---------------|         
     |       1      |       1       |         
     |--------------|---------------|         
     |       1      |       1       |         
     |--------------|---------------|         
     |       1      |       1       |         
     --------------------------------   


What am I missing?

  • 写回答

2条回答 默认 最新

  • doupuzhimuhan9216 2015-10-26 16:51
    关注

    I figured it out. This can be done, but you need to clone $query. It also helps to use Laravel's with helper function for chaining:

    $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();
    

    It seems like this would be useful if $query is a longer query than the one provided in the example.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?