有很多:显示包含1个或多个元素的区域

时间:2018-04-27 08:18:07

标签: laravel relationship

我和adv模型之间有关系。实际上我想显示所有具有一个或多个活动副词的区域(我有活动列到adv)。而下一个类似的问题。所有地区都包含城市。当用户选择某个区域进入视图时,他看到了该地区的所有城市。最好的方法是什么?

我不会手动编写每个城市。我有两个想法:

  1. 第一个城市将是字符串列。实际上用户会选择区域并将城市名称写入输入字段。

  2. 控制器将检查此区域是否存在此城市。如果没有,它将创建一个新的。

  3. 我认为第二个想法更好,因为创建搜索引擎和过滤结果会更简单。

2 个答案:

答案 0 :(得分:0)

你有2个模特

  1. 地区(有很多Adv)
  2. Adv(brlongs to Region)
  3. 1)Region.php

    <?php
    
    namespace App\Models;
    
    use Eloquent;
    
    class Region extends Eloquent
    {
        protected $table = "region";
    
        public function regionadv()
        {
            /*For active adv only*/
            return $this->hasMany('App\Models\Adv')->where('active', '=', 1);
        }
    
    }
    

    在eloquent中查询:

    $regionlist = = Region::has('regionadv')->get();
    
    祝你好运。

答案 1 :(得分:0)

您可以在此类推荐中使用global scope来过滤为仅有效的推荐。 (这将过滤所有雄辩查询中的副词)


高级模型:

namespace App\Models;

use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;

class Adv extends Model
{


    /**
     * The "booting" method of the model.
     *
     * @return void
     */
    protected static function boot()
    {
        parent::boot();

        static::addGlobalScope('aktiv', function (Builder $builder) {
            $builder->where('aktiv', '=', true);
        });
    }
}

然后在区域模型中使用关系

namespace App\Models;

use Eloquent;

class Region extends Eloquent
{
    public function adv()
    {
        return $this->hasMany('App\Models\Adv');
    }
}

并在控制器中获取结果:

$region = Region::has('adv')->get();