2016-02-21 39 views
0

我有3個表用戶,配置文件和朋友。PHP Laravel 5.2屬於

顯然,用戶包含用戶。 然後我得到了配置文件和朋友表(見下文)。

public function up() 
{ 
    Schema::create('profiles', function (Blueprint $table) { 
     $table->increments('id'); 
     $table->integer('user_id')->unsigned(); 
     $table->foreign('user_id')->references('id')->on('users'); 
     $table->string('picture')->nullable(); 
     $table->string('status')->nullable(); 
     $table->string('text')->nullable(); 
     $table->boolean('show_sex'); 
     $table->boolean('show_dob'); 
     $table->timestamps(); 
    }); 
} 

public function up() 
{ 
    Schema::create('friends', function (Blueprint $table) { 
     $table->increments('id'); 
     $table->integer('user_id_sender')->unsigned(); 
     $table->integer('user_id_receiver')->unsigned(); 
     $table->foreign('user_id_sender')->references('id')->on('users'); 
     $table->foreign('user_id_receiver')->references('id')->on('users'); 
     $table->integer('status'); // 1 = friends, 2 = under validation 
     $table->timestamps(); 
    }); 
} 

正如您所看到的,我創建了一些與Users表相關的外鍵。

Friends表格包含用戶之間的所有友誼(狀態字段將確定友誼是否處於驗證或驗證狀態)。 我有Laravel 5.2自帶的默認用戶模型,並且想知道如何輕鬆地獲得屬於簽名用戶的所有友誼? 我可以使用類似belongsTo()之類的東西來輕鬆地獲取user_id_receiver字段與簽名用戶標識相同的所有friendrequests嗎?我沒有安靜地理解hasOne或belongsTo的文檔。如果有人能夠清楚它的實際工作方式,那該多好。

在此先感謝。

+0

我最好的建議是在你直接去編碼並詢問Laravel之前,當你知道它會使你的代碼邏輯更容易時,嘗試設計你的數據庫表(ER-設計)。 –

回答

1

是的,您應該使用UserProfile型號之間的一對一關係,以及UserFriend型號之間的一對多關係。這種添加到這兩個型號 - FriendProfile

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

這添加到User型號:

public function profile() 
{ 
    return $this->hasOne('app\Profile'); 
} 

public function friend() 
{ 
    return $this->hasMany('app\Friend'); 
} 

然後你可以用雄辯來獲得數據:

$signedUserId = Auth::user()->id; 
$currentUserFriendRequests = Friend::where('user_id_receiver', $signedUserId)->get(); 

希望這將是有益的。

+0

那麼,這對我來說實際上是有意義的。而且,它似乎正在使用該解決方案。謝謝! – Kaizokupuffball