我有一个带有lars表和make表的laravel项目。我已经在make表和post表之间建立了关系。 帖子表包含make_id。 我想查询并从所有帖子中获取所有独特的品牌。我进行了查询并获得了唯一的make_id,但是无法获得唯一的make_names。我在这里想念什么?
PostModel:
"updateDescription":
{"updatedFields":{
"answers":[
{"likedBy":["5ced9e11aa9f7a280fc5e79e"], "readBy":["5ced9e11aa9f7a280fc5e79e"], "id":1560962918255,"text":"text 1", "author":"5ced9e11aa9f7a280fc5e79e"},
{"likedBy":[], "readBy":["5ced9e11aa9f7a280fc5e79e"], "id":1560962976840,"text":"text 2", "author":"5cffc9cdc2ded906ff980f94"}
]
}
我的查询:
ArrayFilters
我得到的结果
<?php
namespace App;
use App\Post;
use App\Make;
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
protected $table = 'posts';
protected $dates = ['status_change'];
public function make_rel()
{
return $this->belongsTo(Make::class, 'make_id' ,'id','make_logo');
}
}
此结果正确。但是,而不是9、1、5、6和11。我应该得到它们的品牌名称,分别是BMW,Harley,Roayl,Indian和Honda。这是下面的make表的屏幕截图。
我想念什么?如何解决?
答案 0 :(得分:1)
您需要Make
中的东西。因此,从Make
开始。
要仅过滤有帖子的品牌,请使用whereHas()
$uniqueMakeNames = Make::whereHas('posts')->pluck('make_name')->unique();
确保已在postst()
模型上定义了Make
关系。
class Make extends Model
{
public function posts()
{
return $this->hasMany(Post::class);
}
}
答案 1 :(得分:0)
好吧,您确实使用过::select('make_id')
,然后使用了->pluck('make_id')
。
您为什么惊讶您的结果只包含您所采摘的东西?
尝试使用Posts::all()->get()->make_rel()->distinct()
而不是make_rel
的{{1}}或相同的代码