根据条件合并两个查询结果

Merging two query result based on condition

我有两个查询 results.I 需要根据条件合并查询结果。

$portfolio = DB::table('architects_portfolio')->get();

 $img=DB::table('architects_portfolio_images')
          ->distinct()->get(['architects_images_id']);

我的合并条件是

architects_portfolio.id = architects_portfolio_images.architects_images_id

我的第一个 table 'architects_portfolio' 包含投资组合,第二个 table 'architects_portfolio_images' 包含 portfolio.I 的图像,只需要获取一张图像now.But 我现在通过使用下面的方法得到所有投资组合的图像 code.But 我只需要一个

 $architect = User::find($user_id)->architect;               
 $portfolio = ArchitectsPortfolio::join('architects_portfolio_images as images', 'architects_portfolio.id', '=', 'images.architects_images_id')
            ->where('architects_portfolio.architects_id', $architect->id)
            ->select('architects_portfolio.id', 'architects_portfolio.architects_id', 'architects_portfolio.name', 'architects_portfolio.description', 'images.filename','images.architects_images_id')
            ->distinct()->get(['images.architects_images_id']);

我的table architects_potfolio

architects_portfolio_images

 $querys = DB::table('architects_portfolio');    
 $querys->select('architects_portfolio_images.architects_images_id');
 $querys->join('architects_portfolio','architects_portfolio.id','=','architects_portfolio_images.architects_images_id')->distinct()->get();

你应该试试这个:

$rsltArchitectDetails = DB::table('architects_portfolio')
                    ->select('architects_portfolio_images.architects_images_id')
                    ->join('architects_portfolio_images', 'architects_portfolio.id' , '=', 'architects_portfolio_images.architects_images_id')
                    ->distinct()
                    ->get();

最好的方法是使用 relationships,然后您可以只加载包含相关图片的作品集:

$portfolios = ArhitectPortfolio::with('images')->get();

要让它工作,你只需要在ArhitectPortfolio模型中定义images关系:

public function images()
{
    return $this->hasMany(ArchitectPortfolioImage::class, 'architects_images_id');
}

我们可以使用以下代码代替合并

$data = Architect::where("user_id", $user_id)->first();
$architect = User::find($user_id)->architect;
        $portfolio = ArchitectsPortfolio::where('architects_portfolio.architects_id', $architect->id)->paginate(6);
        foreach ($portfolio as $r) {
            $image = ArchitectsPortfolioImages::where('architects_images_id', $r->id)->first();
            if ($image) {
                $r->filename = $image->filename;
            }
        }