Имеет много: отображать области с 1 или более элементами - PullRequest
0 голосов
/ 27 апреля 2018

У меня есть связь между ADV и моделью региона. На самом деле я хочу отобразить все регионы, которые имеют один или несколько активных ADV (у меня есть активный столбец в ADV). И следующая похожая проблема. Все регионы содержат города. Когда пользователь выбрал какой-то регион, он увидел все города этого региона. Каков наилучший способ сделать это?

Я не буду писать вручную во всех городах. У меня есть 2 идеи:

  1. Первыми городами будет строковый столбец. На самом деле пользователь выберет регион и напишет название города в поле ввода.

  2. контроллер проверит, существует ли этот город с этим регионом. Если нет, то создаст новый.

Я думаю, что вторая идея лучше, потому что создавать поисковую систему и фильтровать результаты будет проще.

Ответы [ 2 ]

0 голосов
/ 27 апреля 2018

Вы можете использовать глобальную область действия в своем объявлении, как этот, чтобы фильтровать только активные объявления. (это отфильтрует рекламные сообщения во всех красноречивых запросах)


Модель рекламного объявления:
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();
0 голосов
/ 27 апреля 2018

У вас есть 2 модели

  1. Регион (имеет много Adv)
  2. Adv (в регионе)

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);
    }

}

Запрос в красноречивом:

$regionlist = = Region::has('regionadv')->get();

Удачи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...