laravel从联接表中选择一列

laravel从联接表中选择一列,laravel,join,eloquent,inner-join,Laravel,Join,Eloquent,Inner Join,我被能言善辩的拉威尔困住了 任何帮助都将受到感谢 设置: 员额表 id | name | desc... 照片/表格 id | post_id | image_path posts模型 public function photo() { return $this->hasOne('App\Photo'); } 照片模型 public function posts() { return $this->belongsTo('App\Flyer');

我被能言善辩的拉威尔困住了

任何帮助都将受到感谢

设置:

员额表

id | name | desc...
照片/表格

id | post_id | image_path
posts模型

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

public function posts()
{
return $this->belongsTo('App\Flyer');
}
我希望获取所有帖子,并且只获取属于每个帖子的一个图像,因为每个帖子可以有更多的图像。 无法使用Elount或db builder创建此项

编辑:再问一个问题:


以及如何仅获取所需的列,如posts\u table.name和photos\u table.image\u path

为了方便使用雄辩的ORM,请使用posts make it post等单数形式创建模型名称。然后从数据库中将列id重命名为post\u id。为别人做这件事。 现在看看你的模型

addprotected$primaryKey=post_id; 为别人做这件事。使用hasOne或HasMany others方法连接表会让您头疼。它会为关系生成主键和外键asmodelname\u id(用于post model post\u id)。 现在写下你的关系,通过post获取照片 后置模型

}

关系完成:

在你的控制器中,要想获得带有照片的帖子,你必须写

$posts=Post::with('photos')->get();
打印r$帖子;退出//检查它是否正常工作

它会给你每个帖子的所有照片 必须使用嵌套循环来查看一个或多个循环。 像 如果$posts->photos{ foreach$posts->photos as$sn=>$photo }
请尝试一下这个概念,它可能会帮助你:D

从这篇文章中,我找到了一个答案:

我必须在原始sql中完成这项工作,也许下一个任务就是重构到雄辩的状态

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

为什么照片模型中的关系属于传单的可能重复?那不应该是邮局吗?另外,如果一篇文章可以有多张照片,你应该在文章模型中使用hasMany而不是hasOne。你能用模型文件中的更多信息更新你的问题吗,比如文件名和类名?我一到家就会试试,tnx,以及如何在每篇文章中只获得一张照片?
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