Laravel从外部表中查询不同的值

时间:2019-08-13 05:42:10

标签: laravel laravel-5.8

我有一个带有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表的屏幕截图。

enter image description here

我想念什么?如何解决?

2 个答案:

答案 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}}或相同的代码