我坚持口才和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
答案 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