合并两个查询不会返回所有可用记录

时间:2019-03-05 10:14:27

标签: laravel

我在将两个查询结果合并到数组时遇到麻烦-合并后的输出包含一个查询($ factsheets)的所有记录,但仅包含另一个查询($ actives)的最后一条记录,通常至少存在3条记录“可用”返回。

我的控制器的代码如下:

public function show($pest)
{
  $theactives = self::getActives($pest);
  $thefactsheets = self::getFactsheets($pest);

  $merged = $theactives->merge($thefactsheets);
  $result = $merged->all();
  return $result;
}

public function getActives($pest){
  $actives = Active::where('pests.id',$pest)
    ->join("active_pest","actives.id","=","active_pest.active_id")
    ->join("pests","pests.id","=","active_pest.pest_id")
    ->select('ai', 'groupcode', 'risk', 'pest')
    ->orderBy('ai')
    ->get();
  return $actives;
}

public function getFactsheets($pest){
  $factsheets = Factsheet::where('pest_id',$pest)
    ->join("factsheet_pest","factsheets.id","=","factsheet_pest.factsheet_id")
    ->select('title', 'factsheets.id')
    ->orderBy('title')
    ->get();
  return $factsheets;
}

再次,我的期望超出了我的能力-我在这里做错了什么?

2 个答案:

答案 0 :(得分:1)

您无法合并结果集的对象。因此,您必须在合并之前先将结果转换为数组。试试下面的脚本。

public function show($pest)
{
  $theactives = self::getActives($pest);
  $thefactsheets = self::getFactsheets($pest);

  return array_merge($theactives, $thefactsheets);
}

public function getActives($pest){
  return Active::where('pests.id',$pest)
    ->join("active_pest","actives.id","=","active_pest.active_id")
    ->join("pests","pests.id","=","active_pest.pest_id")
    ->select('ai', 'groupcode', 'risk', 'pest')
    ->orderBy('ai')
    ->get()->toArray();
}

public function getFactsheets($pest){
  return  Factsheet::where('pest_id',$pest)
    ->join("factsheet_pest","factsheets.id","=","factsheet_pest.factsheet_id")
    ->select('title', 'factsheets.id')
    ->orderBy('title')
    ->get()->toArray();
}

答案 1 :(得分:0)

您可以在laravel中使用union

示例

$silver = DB::table("product_silver")

    ->select("product_silver.name"

      ,"product_silver.price"

      ,"product_silver.quantity");



$gold = DB::table("product_gold")

    ->select("product_gold.name"

      ,"product_gold.price"

      ,"product_gold.quantity")

    ->union($silver)

    ->get();

then
dd($gold);