Laravel один ко многим (полиморфные) отношения - PullRequest
0 голосов
/ 16 февраля 2019

Я создаю проект Laravel, в котором администраторы и руководители могут иметь клиентов.

Модель администратора

public function clients()
{
    return $this->morphMany('App\Client', 'executable');
}

Client.php

public function executable()
{
    return $this->morphTo();
}

Таблица клиентов

public function up()
{
    Schema::create('clients', function (Blueprint $table) {
        $table->increments('id');
        $table->string('name',100);
        $table->morphs('executable');
        $table->timestamps();
    });
}

/**
 * Reverse the migrations.
 *
 * @return void
 */
public function down()
{
    Schema::dropIfExists('clients');
}

При выполнении dd()

$data = App\Admin::find(1)->clients()->get(); Возвращается ноль

Collection {#524 ▼
  #items: []
}

Ответы [ 2 ]

0 голосов
/ 16 февраля 2019

Как только ваша таблица базы данных и модели определены, вы можете получить доступ к отношениям через ваши модели.Например, чтобы получить доступ ко всем clients для Admin, вы можете использовать динамическое свойство clients:

$data = App\Admin::find(1)->clients;

0 голосов
/ 16 февраля 2019

Не могли бы вы вставить больше информации о вашем коде?

Особенно, как вы заполняете свои admins и clients записи.

Ниже работает для меня.

public function testRun()
{
    Artisan::call('migrate');

    $admin = new Admin();
    $admin->id = 1;
    $admin->save();

    $client = new Client();
    $client->id = 11;
    $client->name = 'name';
    $client->executable_id = 1;
    $client->executable_type = 'App\Admin';
    $client->save();

    dd(Admin::find(1)->clients()->get());
}

Результат

Illuminate\Database\Eloquent\Collection {#899
  #items: array:1 [
    0 => App\Client {#900
      #connection: "sqlite"
      #table: "clients"
      #primaryKey: "id"
      #keyType: "int"
      +incrementing: true
      #with: []
      #withCount: []
      #perPage: 15
      +exists: true
      +wasRecentlyCreated: false
      #attributes: array:6 [
        "id" => "11"
        "name" => "name"
        "executable_type" => "App\Admin"
        "executable_id" => "1"
        "created_at" => "2019-02-16 16:48:59"
        "updated_at" => "2019-02-16 16:48:59"
      ]
      ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...