2015-11-20 207 views
0

首先,在我的MySQL數據庫,我有一個名爲「用戶」和「users_details」 2個表和它們在關係獲取記錄雄辯Laravel 5

用戶表

ID( PK,AI,INT),用戶名(VARCHAR,UNQ),密碼(VARCHAR), 全稱(VARCHAR)

和users_table

ID(PK,AI,INT),電子郵件(VARCHAR),電話(VARCHAR),地址(VARCHAR),has_record(VARCHAR), USER_ID(INT,FK =參考表 'users.id')

和我的模型綁定。

'用戶' 模式

<?php namespace App; 

use Illuminate\Auth\Authenticatable; 
use Illuminate\Database\Eloquent\Model; 
use Illuminate\Auth\Passwords\CanResetPassword; 
use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract; 
use Illuminate\Contracts\Auth\CanResetPassword as CanResetPasswordContract; 

class User extends Model implements AuthenticatableContract, CanResetPasswordContract { 

    use Authenticatable, CanResetPassword; 

    /** 
    * The database table used by the model. 
    * 
    * @var string 
    */ 
    protected $table = 'users'; 
    /** 
    * The attributes that are mass assignable. 
    * 
    * @var array 
    */ 
    protected $fillable = ['username', 'email', 'password']; 

    /** 
    * The attributes excluded from the model's JSON form. 
    * 
    * @var array 
    */ 
    protected $hidden = ['password', 'remember_token']; 

    public function user_details(){ 
     return $this->hasOne('App\users_details'); 
    } 

} 

和 'users_details' 模式

<?php namespace App; 

use Illuminate\Database\Eloquent\Model; 

class users_details extends Model { 

    protected $table = "user_details"; 


     public function ud() 
     { 
      return $this->belongsTo('App\User'); 
     } 
} 

,我知道我可以做像

$data = User::find(1)->with('user_details'); //or 
$data = User::find(1)->user_details; 

但如何我想'User'表中的全名記錄是'users_table''user_id'外鍵的主要參考表?怎麼做?我試過

$data = users_details::where('has_record', '=', 'no')->with('ud')->get(); //get all the records where column 'has_record' of 'users_details' is equal to 'no' 
$data = $data->ud->fullname; //get the fullname 

但不幸的是,可悲的是不工作,任何幫助,想法,線索,建議,建議嗎?

UPDATE:

我實現它使用查詢生成器

$test = DB::table('users') 
       ->join('user_details', 'users.id', '=', 'user_details.user_id') 
       ->where('has_record', '=', 'no') 
       ->get(); 

但有沒有用雄辯的力量的方式我能做到這一點?

+1

除非沒有特定的原因,否則我會建議將所有內容放在用戶表中。如果除了用戶以外的其他內容都有詳細信息,我可以想到擁有「詳細信息」表格的唯一原因是。就目前而言,你只是讓事情變得更加複雜。 – user3158900

回答

1

你可以這樣做。

根據你的代碼

查找與用戶渴望負載一個用戶詳細信息並獲得名字。

$user_detail = user_details::with('ud')->find(1); 
$user_detail->ud->name; 

獲取用戶急切加載和獲取用戶名的所有用戶詳細信息。

$user_details = user_details::with('ud')->get(); 

foreach($user_details as $user_detail){ 
    echo $user_detail->user->name; 
} 

我有一個建議給你,如果你想。 嘗試遵循可以使代碼更具可讀性的單數/複數格式。

// User Classs. 
public function user_detail(){ 
    return $this->hasOne('App\UserDetail'); 
} 

// UserDetail Class. 
public function user(){ 
    return $this->belongsTo('App\User'); 
}