Laravel - Доступ к массиву отношений - PullRequest
0 голосов
/ 27 апреля 2019

Я пытаюсь получить доступ к массиву отношений, но получаю ошибку.

Это моя модель кампании:

class Campagne extends Model
{
    protected $table = 'Campagne';

    /**
     * The primary key for the model.
     * 
     * @var string
     */
    protected $primaryKey = 'Id';


    public $incrementing = false;


    public function Annonceur()
    {
        return $this->belongsTo('App\Annonceur', 'Annonceur');
    }

}

В моей базе данных у меня есть хороший внешний ключ, а на панели отладки у меня есть этот объект:

0 => Campagne {#574 ▼
  #table: "Campagne"
  #attributes: array:12 [▼
    "Id" => 7
    "Nom" => "ORANGE"
    "DateDebut" => null
    "DateFin" => null
    "Annonceur" => 25
    "Service" => 25
    "Description" => null
    "Active" => null
    "Visible" => 1
    "CommerceMaj" => null
    "created_at" => "2019-04-27 15:00:43"
    "updated_at" => "2019-04-27 15:00:43"
  ]
  #relations: array:1 [▼
    "Annonceur" => Annonceur {#610 ▼
      #table: "Annonceur"
      #primaryKey: "Id"
      #fillable: array:12 [▶]
      #connection: "mysql"
      #keyType: "int"
      +incrementing: true
      #with: []
      #withCount: []
      #perPage: 15
      +exists: true
      +wasRecentlyCreated: false
      #attributes: array:17 [▶]
      #original: array:17 [▶]
      #changes: []
      #casts: []
      #dates: []
      #dateFormat: null
      #appends: []
      #dispatchesEvents: []
      #observables: []
      #relations: []
      #touches: []
      +timestamps: true
      #hidden: []
      #visible: []
      #guarded: array:1 [▶]
    }
  ]

}

Мне нужен доступ к атрибуту отношения "Annonceur", но у меня возникает ошибка при попытке:

$campagne->Annonceur->Name для примера.

Спасибо

1 Ответ

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

Отношения, которые вы определили с помощью

return $this->belongsTo('App\Annonceur', 'Annonceur');

называется Many to Many отношениями.

Это означает, что вы говорите Ларавеллу, что у вашего campagne много Annonceur. в результате, когда вы обращаетесь к $campagne->Annonceur, он возвращает коллекцию (для простоты, давайте представим, что это массив) Annonceur вместо одного экземпляра Annonceur. Таким образом, вы можете пройти через все эти Annonceur, используя цикл for, как показано ниже:

foreach($campagne->Annonceur as $annonceur){
  dd($annonceur->Name);
}

или для доступа только к первому annonceur, к которому вы можете получить доступ, как показано ниже:

$campagne->Annonceur->first()->Name;

Если вы измените отношение на one to one, значит, используйте

$this->hasOne('App\Annonceur', 'Id', 'Annonceur');

тогда вы можете получить доступ как: $campagne->Annonceur->Name; Если ваши определенные отношения верны.

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