2016-02-27 137 views
1

我有兩個機型的用戶和用戶類型聲明如下:Laravel ORM關係返回上Laravel空5.2

class User extends Model { 
    protected $table = 'user'; 
    protected $primaryKey = 'user_id'; 

    public function company() { 
     return $this->hasOne('App\Models\Company', 'company_id', 'company_id'); 
    } 

    public function userType() { 
     return $this->hasOne('App\Models\UserType', 'user_type_id', 'user_type_id'); 
    } 
} 

class UserType extends Model { 
    protected $table = 'user_type'; 
    protected $primaryKey = 'user_type_id'; 
} 

現在,我使用查詢的關係:

User::with('userType', 'company')->all() 

奇怪的是,我得到公司但userType始終爲空。 MySQL查詢日誌顯示Laravel能夠獲取user_type記錄。

公司USERTYPE之間的唯一區別關係是主鍵的數據類型。 company.company_id是數字,而user_type.user_type_id是一個字符串。 我認爲它與鍵的數據類型有關,但是我在Laravel 5.1上有類似的設置,它運行的很好。

回答

0

Laravel支持非數字的主鍵,但你需要設置:

public $incrementing = false; 

在模型類上。 我改變用戶類型定義來更正問題:

class UserType extends Model { 
    protected $table = 'user_type'; 
    protected $primaryKey = 'user_type_id'; 
    public $incrementing = false; 
} 
0

的第一個問題我與你的關係,注意的是,你傳遞給hasOne函數的第一個user_type_id是錯誤的,因爲你有user_type_id作爲主鍵user_type表。 hasone的第二個參數必須是用戶父表的外鍵。因此,如果您在user_type表中有類似user_id的內容,請改用它。

但是,如果不是這種情況和用戶而屬於UserType那麼你必須將hasOne更改爲belongsTo。

+0

這個問題確實是我最初猜測的數據類型。看到我的答案。 – gmarintes