从两个相关表/模型中选择特定列

时间:2017-10-31 22:30:01

标签: php laravel eloquent laravel-5.5

我有一个关系N x 1,Traceback (most recent call last): File "C:\Users\Franck\Documents\rouge.py", line 8, in <module> r = Rouge155() File "C:\Anaconda\envs\py35\lib\site-packages\pyrouge\Rouge155.py", line 88, in __init__ self.__set_rouge_dir(rouge_dir) File "C:\Anaconda\envs\py35\lib\site-packages\pyrouge\Rouge155.py", line 402, in __set_rouge_dir self._home_dir = self.__get_rouge_home_dir_from_settings() File "C:\Anaconda\envs\py35\lib\site-packages\pyrouge\Rouge155.py", line 416, in __get_rouge_home_dir_from_settings with open(self._settings_file) as f: FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Users\\Franck\\AppData\\Roaming\\pyrouge\\settings.ini' ,Post-&gt; User有如下关系:

Post.php(模特):

Post x User

我想在提取每个帖子时仅从用户模型中选择.... public function user() { return $this->belongsTo('User'); } .... id,但我还想要帖子中的usernameid(不是Post模型中的每一列)。

With this solution

title

我可以从return Post::with(array('user'=>function($query){ $query->select('id','username'); }))->get(); 获取idusername,但我也从User模型中提取所有列,而不是我想要的,所以o尝试:

Post

虽然没有成功,但return Post::with(array('user'=>function($query){ $query->select('id','username'); }))->select(['id', 'title'])->get(); 变为空,我留下来自邮政的Userid

我正在回复json回复,如果相关的话。

注意:我不想在我的Post.php模型文件上进行任何“硬编码”,因为我可能想要针对不同情况使用不同列的相同关系,所以我想保留关系是title

2 个答案:

答案 0 :(得分:2)

Post::select('id', 'title', 'user_id')
->with(array('user'=>function($query){
    $query->select('id','username');
}))->get();

您需要使用外键来维护两个模型之间的关系。

答案 1 :(得分:2)

通常我是这样做的。

Post::select('id','title','user_id')->with('user:id,username')->get();

为此,您需要正确定义关系,并且必须从post表中选择外键。