Laravel控制器中的嵌套SQL查询

时间:2016-01-26 11:39:14

标签: php mysql laravel laravel-5

我在控制器中运行了两个查询。我需要将第一个查询中的值传递给第二个查询。我希望将这两个查询的结果发送到我的视图。

public function jobs()
{


    $query = DB::table("dbQuotes")
        ->leftJoin("dbACT", "dbQuotes.act_id", "=", "dbACT.ID")
        ->leftJoin("dbOpps", "dbQuotes.act_id", "=", "dbOpps.contactID")
        ->leftjoin('dbBids', 'dbQuotes.act_id','=',
            DB::raw('dbBids.quote_id AND dbBids.user_id = '. Auth::user()->id))
        ->where("dbQuotes.active", "=", "1")
        ->select("dbQuotes.*", "dbACT.*", "dbBids.*",
            (DB::raw('date_format(dbQuotes.posted_date, "%d/%m/%Y %H:%i") as posted_date')),
            (DB::raw('date_format(dbOpps.expected_date, "%d/%m/%Y") as expected_date')))
        ->groupBy("dbQuotes.id")
        ->orderBy("posted_date", "desc")
        ->get();

$passinvaluehere = $query->dbQuotes.act_id


    $bids = DB::table("dbBids")

        ->where("quote_id", "=", $passinvaluehere)
        ->get();


    return view('jobs', ['query' => $query,'bids' => $bids]);

}

如果我用一个数字替换传递的值,即" 8763"我的查询有效并且视图以正确的方式建立。我的问题是,在这个函数中,我如何将dbQuotes.act_id的值传递给第二个查询?

***更新的答案代码:[错误调用非对象上的成员函数列表()]

public function jobs()
{


    $query = DB::table("dbQuotes")
        ->leftJoin("dbACT", "dbQuotes.act_id", "=", "dbACT.ID")
        ->leftJoin("dbOpps", "dbQuotes.act_id", "=", "dbOpps.contactID")
        ->leftJoin('dbBids', 'dbQuotes.act_id','=',
            DB::raw('dbBids.quote_id AND dbBids.user_id = '. Auth::user()->id))
        ->where("dbQuotes.active", "=", "1")
        ->select("dbQuotes.*", "dbACT.*", "dbBids.*",
            (DB::raw('date_format(dbQuotes.posted_date, "%d/%m/%Y %H:%i") as posted_date')),
            (DB::raw('date_format(dbOpps.expected_date, "%d/%m/%Y") as expected_date')))
        ->groupBy("dbQuotes.id")
        ->orderBy("posted_date", "desc")
        ->get();

    $act_id = $query->lists('act_id');

    $bids = DB::table("dbBids")
        ->whereIn("quote_id", $act_id)
        ->get();


    return view('jobs', ['query' => $query,'bids' => $bids]);

}

1 个答案:

答案 0 :(得分:1)

如果您有多条记录(根据->get()方法),您有两种方法:要么循环遍历Collection并在每次迭代时进行查询(错误),要么创建一个id数组并使用{ {2}}在第二个查询中(更好):

whereIn

如果您希望第一个查询中只有一个记录,则需要使用$passinvaluehere = $query->lists('act_id'); // https://laravel.com/docs/5.2/queries#retrieving-results // this creates and array of `act_id` s $bids = DB::table("dbBids") ->whereIn("quote_id", $passinvaluehere) ->get(); // you now have a Collection of multiple $bids 更改fetcher方法,或者只使用实际集合的第一个元素,例如first()first($query)

$query[0]