在laravel 5.6中使用雄辩的方法从表及其数据透视表中获取已过滤的行

时间:2018-08-07 05:54:38

标签: php laravel eloquent

我有两个模型Base_voter和Custom_list

Custom_list.php

public function base_voters()
{
    return $this->hasMany('App\Models\Base_voter', 'custom_pivot_base', 'custom_list_id', 'base_voter_id');
}

Base_voter

public function custom_lists()
{
    return $this->belongsToMany('App\Models\Custom_list', 'custom_pivot_base', 'custom_list_id', 'base_voter_id');
}

有具有两列的数据透视表custom_pivot_base

custom_list_id, base_voter_id

现在,我需要检索其customer_list_id = 1且street = $ street的base_voter列表,其中city = $ city。这些地址和城市列在base_voters表中。如何在Laravel中雄辩地做到这一点

2 个答案:

答案 0 :(得分:1)

Custom_list模型中更改您的关系

public function base_voters()
{
    return $this->belongsToMany('App\Models\Base_voter', 'custom_pivot_base', 'custom_list_id', 'base_voter_id');
}

还可以在Base_voter模型中更改您的关系

public function custom_lists()
{
    return $this->belongsToMany('App\Models\Custom_list', 'custom_pivot_base', 'base_voter_id', 'custom_list_id');
}

您需要获取base_voter的{​​{1}}列表,这意味着按ID 1提取customer_list_id = 1,然后获取其相关的customer_list。像这样

base_voters

现在您可以像这样打印它了

$customList = Custom_list::with(['base_voters' => function($query) use ($city, $gender){  

                    $query->where('city',$city)->where('gender', $gender);

              }])->find(1);

答案 1 :(得分:-1)

您正在寻找的是“ hasManyThrough”关系。 https://laravel.com/docs/5.6/eloquent-relationships#has-many-through

请仔细阅读本文档并定义模型之间的关系。