2015-09-01 3 views
1

Я хотел бы создать связь между таблицами 2 с красноречивым, но я не могу найти точно, как поступить ...laravel4 Как я могу использовать красноречие в моем контроллере?

Вот мои 2 модели с соотношением:

Таблица «Etablissement»:

<?php class Etablissement extends Eloquent { 
/** 
* The database table used by the model. 
* 
* @var string 
*/ 
protected $table = 'etablissement'; 

public function annulation() 
{ 
    return $this->hasMany('Annulation'); 
}} 

Таблица "кольчатость":

<?php class Annulation extends Eloquent { 
/** 
* The database table used by the model. 
* 
* @var string 
*/ 
protected $table = 'annulation_remboursement'; 

public function etablissement() 
{ 
    return $this->belongsTo('Etablissement'); 
}} 

В таблице "ETABLISSEMENT" есть идентификатор для каждого Etablissement (id_etablis sement), а в «annulation» есть столбец с id_etablissement. Как я могу вернуться в мой контроллер отношение, чтобы иметь имя ETABLISSEMENT в с annulation-> id_etablissement:

class AnnulationsController extends \BaseController { 

/** 
* Display a listing of the resource. 
* 
* @return Response 
*/ 
public function index() 
{ 

} 

ответ

1

Это должно быть что-то вроде этого в вашем методе index:

$annulation = Annulation::find(1); 

$annulation->etablissement->name 

annulation_remboursement таблица должна иметь поле establissement_id.

+0

Спасибо за этот ответ, но я получаю сообщение об ошибке: Попытка получить свойство не-объекта ... Любая идея? – Matthieu

+0

Просто убедитесь, что вы тестируете строку 'annulation', которая имеет существующее etablissement. – user2094178

+0

Да, если я сделал var_dump ($ annulation-> etablissement_id), он работает, я могу получить результат вроде (7501). – Matthieu

0

Возможно, ошибка может быть в ключах отношения.

В https://laravel.com/docs/4.2/eloquent#one-to-one мы видим:

принять к сведению, что Eloquent предполагает внешний ключ отношений на основе имени модели. В этом случае предполагается, что модель телефона использует внешний ключ user_id. Если вы хотите переопределить это соглашение, вы можете передать второй аргумент методу hasOne. Кроме того, вы можете передать третий аргумент методу, чтобы указать, какой локальный столбец следует использовать для ассоциации:

return $ this-> hasOne ('Phone', 'foreign_key');

возвращение $ this-> hasOne ('Phone', 'foreign_key', 'local_key');

[...] One To Many: Опять же, вы можете переопределить обычный внешний ключ, передав второй аргумент методу hasMany. И, как и отношение hasOne, может быть указан локальный столбец:

return $ this-> hasMany ('Comment', 'foreign_key');

return $ this-> hasMany ('Comment', 'foreign_key', 'local_key');

* Вы должны также проверка Определение инвертировать Relation на той же странице.

Итак, в вашем случае у вас есть ключ с именем id_establissement, но Laravel ищет establissement_id.Если вы хотите изменить это поведение и указать ключ, который вы должны сделать что-то вроде:

protected $table = 'etablissement'; 
public function annulation() 
{ 
    return $this->hasMany('Annulation','id_establissement'); 
} 

и в соответствии с «инвертировать отношения»

protected $table = 'annulation_remboursement'; 
public function etablissement() 
{ 
    return $this->belongsTo('Etablissement','id_establissement'); 
} 

Следует заметить, что я не ставил какой-либо из локальные ключи, но это будет третий параметр отношения.

Смежные вопросы