laravel从连接表中选择一列

时间:2015-10-11 21:04:01

标签: laravel join eloquent inner-join

我坚持口才和laravel。

任何帮助都会得到满足。

设置:

posts_table

id | name | desc...

photos_table

id | post_id | image_path

发布模型

public function photo()
    {
        return $this->hasOne('App\Photo');
    }

照片模特

public function posts()
{
return $this->belongsTo('App\Flyer');
}

我想获取所有帖子,只想获取属于每个帖子的一张图片,因为每个帖子可能会有更多图片。 无法使用eloquent或db builder创建它。

编辑:再补q:)

以及如何只获取所需的列,例如posts_table.name和photos_table.image_path

2 个答案:

答案 0 :(得分:0)

对于免费使用Eloquent ORM,请以单一形式制作您的模型名称,如帖子使其发布。然后将列ID重命名为post_id from database。为别人做。 现在看看你的模型。

添加protected $primaryKey="post_id"; 为别人做。使用hasOne()hasMany()其他方法加入表格会让您头疼。它会为帖子模型生成主键和外键(modelname_id) post_id < / b>表示关系。 现在写下您的关系以获得帖子照片 在帖子模型中

public function photos(){
    return $this->hasMany('App\Photo');

}

关系完成:)

在你的控制器中发布照片,你必须写

$posts=Post::with('photos')->get();

print_r($ posts);退出; //检查它是否正常工作

它将为您提供每个帖子的所有照片 你必须使用嵌套循环来查看它们中的一个或多个。 如 if($posts->photos){ foreach($posts->photos as $sn=>$photo) } 请尝试这个概念,它可以帮助你:D

答案 1 :(得分:0)

从这篇文章中我找到了答案:How to select just 1 child table item for each parent record?

我必须在原始sql中执行,也许重构为eloquent将是下一个任务。

SELECT posts.id, image_path 
  FROM (SELECT * FROM posts) posts 
  LEFT JOIN (SELECT * FROM photos_table GROUP BY posts_id) photos_table 
  ON  posts.id = posts_id