简体   繁体   English

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

[英]Merging two query result based on condition

I have two query results.I need to merge the query result based on a condition. 我有两个查询结果。我需要根据条件合并查询结果。

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

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

and my condition to merge is 我合并的条件是

architects_portfolio.id = architects_portfolio_images.architects_images_id

I have my first table 'architects_portfolio' which contain portfolio and second table 'architects_portfolio_images' which contain images of portfolio.I need to get only one image for now.But I get all images of portfolio now by using below code.But I need only one 我的第一个表'architects_portfolio'包含投资组合,第二个表'architects_portfolio_images'包含投资组合的图像。我现在只需要获得一张图像,但是现在我要使用下面的代码来获得所有投资组合的图像,但是我只需要一

 $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']);

My tables architects_potfolio 我的表architects_potfolio

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

You should try this: 您应该尝试这样:

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

The best way is to use relationships , then you could just load portfolios with related images: 最好的方法是使用Relationships ,然后就可以加载带有相关图像的投资组合:

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

To make it work, you just need to define the images relationship in the ArhitectPortfolio model: 要使其工作,您只需要在ArhitectPortfolio模型中定义images关系:

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

Instead of merging we can make use of following code 除了合并,我们还可以使用以下代码

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM