Ответ 1
Да, в некоторых случаях это работает, чтобы указать ключи и заставить работу работать. И в некоторых случаях я имею в виду главным образом получение результатов. Вот пример:
БД
users profiles
----- --------
id id
etc... user_id
etc...
Модели
Использование "неправильных" отношений с hasOne
дважды
class User extends Eloquent {
public function profile(){
return $this->hasOne('Profile');
}
}
class Profile extends Eloquent {
public function user(){
return $this->hasOne('User', 'id', 'user_id');
}
}
Запросы
Скажем, мы хотели получить пользователя от определенного профиля
$profile = Profile::find(1);
$user = $profile->user;
Это работает. Но он не работает, как это должно быть. Он будет обрабатывать первичный ключ users
как внешний ключ, который ссылается на user_id
в profiles
.
И хотя это может сработать, вы столкнетесь с проблемами при использовании более сложных методов отношений.
Например associate
:
$user = User::find(1);
$profile = Profile::find(2);
$profile->user()->associate($user);
$profile->save();
Вызов вызовет исключение, потому что hasOne
не имеет метода associate
. (BelongsTo
имеет)
Заключение
В то время как BelongsTo
и hasOne
могут вести себя одинаково в некоторых ситуациях. Их явно нет. Более сложные взаимодействия с отношениями не сработают, и это бессмыслица с семантической точки зрения.