当前位置: 首页 > 面试题库 >

在Laravel Eloquent中使用“ With()”函数获取特定列

钱峻
2023-03-14
问题内容

我有两个表,UserPost。一个User可以有许多posts,一个post只能属于一个user

在我的User模型中,我有一个hasMany关系…

public function post(){
    return $this->hasmany('post');
}

在我的post模型中,我有一个belongsTo关系…

public function user(){
    return $this->belongsTo('user');
}

现在,我想使用来连接这两个表,Eloquent with()但是想要第二个表中的特定列。我知道我可以使用查询生成器,但我不想这样做。

Post我在模型中写…

public function getAllPosts() {
    return Post::with('user')->get();
}

它运行以下查询…

select * from `posts`
select * from `users` where `users`.`id` in (<1>, <2>)

但是我想要的是…

select * from `posts`
select id,username from `users` where `users`.`id` in (<1>, <2>)

当我使用…

Post::with('user')->get(array('columns'....));

它仅返回第一个表中的列。我想使用with()第二个表中的特定列。我怎样才能做到这一点?


问题答案:

好吧,我找到了解决方案。可以通过将closure函数with()作为数组的第二个索引传递来完成

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

它只会选择idusername从其他表中选择。我希望这会帮助其他人。

请记住, 主键(在这种情况下为id)必须是 $ query-> select()中 的第一个参数 ,才能实际检索必要的结果。*



 类似资料:
  • 我有两个表,和。一个可以有多个并且一个只属于一个。 在我的模型中,我有一个关系... 在我的模型中,我有一个关系... 现在,我想使用来连接这两个表,但需要第二个表中的特定列。我知道我可以使用查询生成器,但我不想这样做。 当我在模型中编写... 它将运行以下查询... 但我想要的是... 当我用... 它只返回第一个表中的列。我需要使用第二个表中的的特定列。我怎么能那样做?

  • 问题内容: 我想要Excel中特定行的列数。那怎么可能?我使用了POI API 但是我只能得到7的列数。 我希望特定行号的列数为10。excel列不一样 问题答案: 您可以做两件事 用 要么 他们之间有很好的区别 选项1给出实际填充内容的列数(如果10列的第二列未填充,您将得到9) 选项2仅给您最后一列的索引。因此完成了“ getLastCellNum()”

  • 如图所示: 我有一个对象数组,我想是JSON数组。我只想在这个数组上获取“productThumbnailUrl”,并以另一种方式使用它。 有人能帮我得到这个值并将其存储在一个单独的变量中吗? 它在数组中有多行。我只想得到“productThumbnailUrl”。

  • 本文向大家介绍如何在Oracle中使用WITH子句定义函数?,包括了如何在Oracle中使用WITH子句定义函数?的使用技巧和注意事项,需要的朋友参考一下 问题: 您想使用WITH子句在Oracle中定义一个函数。 解 从Oracle Database 12.1开始,您可以在出现SELECT语句的同一SQL语句中定义函数和过程。通过允许两个步骤都在SQL引擎中进行,从而允许在PL / SQL和SQ

  • 问题内容: 有没有办法使用jQuery获得块内容的第5行(第一个字母的偏移量)? 我的意思是可视线,浏览器计算的线,而不是源代码中的线。 问题答案: jQuery.fn.line: 用法: 示例: http : //jsbin.com/akave 这个怎么运作: 它遍历整个元素(实际上是元素的克隆),并 在每个单词中插入一个元素。跨度的最高偏移量已缓存- 当此偏移量更改时,我们可以假定我们在新行上

  • 我想得到给定某个索引的数组类型的值。数组的值是 $status=[1,2]; 我使用这些代码来获取值: $task_state=$status[1]; 但它实际上认为$status是一个字符串并返回 '[' 我知道这其实很简单,但我似乎找不到问题的答案。非常感谢。