Я вижу силу использования Eloquent, но мне все же нужно использовать его в моем проекте. С двумя таблицами я хочу достичь этого:Eloquent ORM отношения один-к-одному или один-ко-многим?
//output - LinkedIn
echo User::find(42)->SocialProvider->Name
У меня есть таблица пользователей и у меня есть таблица SocialProvider со списком социальных сайтов с их именем и апите информацией ключа.
Запись 42 в моей таблице пользователя содержит столбец «SocialProviderID» с идентификатором записи LinkedIn в моей таблице SocialProvider.
Я определил отношения в классах модели следующим образом
class User extends BaseModel implements UserInterface, RemindableInterface {
/**
* The database table used by the model.
*
* @var string
*/
protected $table = 'dbo_RegisteredUser';
protected $primaryKey = "UserID";
public function SocialProvider() { return $this->hasOne('SocialProvider','id'); }
И
class SocialProvider extends Eloquent {
/**
* The database table used by the model.
*
* @var string
*/
protected $table = 'dbo_SocialProvider';
public function user() { return $this->belongsTo('User','SocialProviderID'); }
Но запросы и результаты не выполняют, как хотелось бы.
У кого-нибудь есть идеи?
Я использую MSSQL, но в моей более знакомой MYSQL, я хотел бы этот ОРМ сценарий для выполнения объединения, как это:
SELECT * FROM dbo_RegisteredUser
LEFT JOIN (dbo_SocialProvider)
ON (dboRegisteredUser.SocialProviderID=dbo_SocialProvider.id)
WHERE dbo_RegisteredUser.UserID=42
Благодаря
Джон.
Хм, я думаю, может быть причиной этой проблемы является то, что я не определил отношения должным образом. У каждого пользователя есть только один социальный провайдер (LinkedIn, Facebook), поэтому ограничение внешнего ключа - user.SocialProviderID, и это прямая карта для SocialProvider.id С учетом этого SocialProvider не должен иметь никакого отношения к пользователю. Только пользователь должен обратиться к социальному провайдеру (с user.SocialProviderID) – HowApped
Ну, тогда первое, что я вижу сразу с места в карьер, - вы не распространяете Eloquent ..... в первом классе .... вы, re только расширяет BaseModel ..... но я родом из Laravel3, поэтому он может быть полностью разбросан в L4. – KyleK
Да, это действительная точка. Но из базовой модели я расширяю Eloquent. Если я прямо распространяю Eloquent, я все равно получаю пустой результат. thx хотя .. – HowApped