2015-04-07 7 views
0

У меня есть модель (Клиент) с hasMany отношением к другому (Client_option).Larevel/Eloquent hasMany отношения без внешнего ключа

Две таблицы находятся в разных базах данных (так что есть список клиентов, а затем каждый клиент имеет свою собственную базу данных с таблицей опций внутри).

В классе «Мой клиент» я хочу, чтобы мой метод options() возвращал все содержимое таблицы опций (он знает, какой клиент db искать). Я получаю сообщение об ошибке, потому что столбец client_id не существует в таблице опций. Я могу, конечно, создать этот столбец и заполнить каждую строку идентификатором клиента, но я бы сделал это только для того, чтобы сохранить Eloquent счастливым, поэтому лучше избегать этой маленькой беспорядочности.

Заранее благодарим за вход!

Geoff

ответ

3

Это позволит вам работать с ним как отношение, называют его как динамическое свойство $user->options, большую часть экономии с push методом и так далее:

public function options() 
{ 
    // it will use the same connection as user model 
    $options = ClientOption::on($this->getConnectionName())->get(); 

    // if options model has its own, then simply 
    // $options = ClientOption::get(); 

    $this->setRelation('options', $options); 

    return $options; 
} 

public function getOptionsAttribute() 
{ 
    return (array_key_exists('options', $this->relations)) 

    // get options from the relation, if already loaded 
    ? $this->getRelation('options') 

    // otherwise call the method and load the options 
    : $this->options(); 
} 
+0

Это работает очень хорошо, и, как описано , но я получаю сообщение об ошибке при попытке загрузить отношения параметров так: Client :: with ('options') -> find ($ client_id); Я получаю сообщение об ошибке «Вызов неопределенного метода App \ Models \ Base \ Custom_collection :: addEagerConstraints()» (Custom_collection extends Collection). Я попробовал, чтобы метод options() возвращал $ this-> getRelation ('options') вместо $ options, но без радости. Есть предположения? Я доволен вашим ответом и отмечу как правильный в любом случае. Благодаря! –

+0

Это псевдосвязь. Тем не менее, вы не можете полагаться на все черты отношения «Красноречивый», а одна из них - нетерпеливая загрузка. –

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