2017-05-29 134 views
1

我想知道是否可以做一个在左联接的查询,如果它存在,而不必在同一个“级别”的所有列作连接表去为一个属性(此没有任何关系)Laravel选择对象属性

例如

$users = user::leftJoin("posts","users.id","=","posts.user_id")->get(); 

相反的各个领域一起返回,

["id"/*This actually gets messed up if select doesn't choose wich to use*/, 
    "name", 
    "age", 
    /*Now post fields*/ 
    "tile", 
    "date_posted" 
    ... 
] 

并且具有使其返回

["id", 
    "name", 
    "age", 
    "post"=>[ 
    "id", 
    "tile", 
    "date_posted" 
    ... 
    ] 
] 

编辑:如果可能的话,以避免环路出于显而易见的原因......我知道这是可能的,在不得已将使用它们而不是使用循环会帮忙很多

+1

不,这是不可能的(这样的)。这就是为什么你应该使用关系来代替连接。 – devk

回答

2

您使用雄辩的用户表。为什么不使用关系?它确实是你想要的。创建一个新的Post模型。然后将以下关系添加到您的User型号。

public function posts() 
{ 
    return $this->hasMany(Post::class); 
} 

现在,您可以用后获取用户像这样

$users = User::with('posts')->get(); 

结果是你想要什么。在我的示例中,我也使用User,因为您已经使用user。其结果将包含如您在示例所示员额posts而不是post对象,你可以通过改变关系的方法名称更改该属性的名称。我用过这些,因为它们是正确的约定。

+0

我以用户和帖子为例。 –

+0

@SérgioReis您可以将其与任何其他类型的相似关系进行交换,并且您会得到相同的结果。 – Sandeesh

+0

在实际sitiuation想像这样,用户有一个类型,可以说用户$> ID_TYPE,有时ID_TYPE为空(不存在关联还) –