2013-08-01 1 views
1

Я вижу силу использования 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 

Благодаря

Джон.

ответ

1

Ahh Я понял это с немного отладки. Я неправильно указал отношения.

В моей модели User я нуждался в

class User extends Eloquent implements UserInterface, RemindableInterface { 

    public function socialProvider() { 
     return $this->belongsTo('SocialProvider','SocialProviderID'); 
    } 
0

... Ну отношение использовать идентификатор данной модели .... и вы не ссылки фактического пользователя в любом месте ...

Вы должны иметь collumn в таблице социальной Provider, что сохраняет user_id

Тогда в ваших функциях ...

public function SocialProvider() { return $this->hasOne('SocialProvider','user_id'); } 

и ...

public function user() { return $this->belongsTo('User'); } 
+0

Хм, я думаю, может быть причиной этой проблемы является то, что я не определил отношения должным образом. У каждого пользователя есть только один социальный провайдер (LinkedIn, Facebook), поэтому ограничение внешнего ключа - user.SocialProviderID, и это прямая карта для SocialProvider.id С учетом этого SocialProvider не должен иметь никакого отношения к пользователю. Только пользователь должен обратиться к социальному провайдеру (с user.SocialProviderID) – HowApped

+0

Ну, тогда первое, что я вижу сразу с места в карьер, - вы не распространяете Eloquent ..... в первом классе .... вы, re только расширяет BaseModel ..... но я родом из Laravel3, поэтому он может быть полностью разбросан в L4. – KyleK

+0

Да, это действительная точка. Но из базовой модели я расширяю Eloquent. Если я прямо распространяю Eloquent, я все равно получаю пустой результат. thx хотя .. – HowApped