2015-02-09 115 views
0

我試圖構建類似twitter的東西。當用戶發佈消息時,鏈接,提及和主題標籤鏈接到特定用戶。我使用這段代碼:Laravel查詢關係模型

$post = preg_replace('/[@]+([A-Za-z0-9-_]+)/', '<a href="/$1" target="_blank">$0</a>', $post); 

說,例如,如果我貼「新年快樂@josh #HappyNewYear#2015」。然後在帖子中的鏈接鏈接將是<a href = "/josh">@josh</a>。 但是我有這條路線:

Route::get('/profile{id}', '[email protected]'); 

我怎樣才能改變通過找出具有用戶名的用戶在帖子中的鏈接。我有兩個表usersuser_profileusername字段存在於user_profile表中,該表與users具有OneToOne關係。我正在使用Sentry 2軟件包。

我有另一種選擇。我可以改變路線來爲配置文件提供用戶名,但我必須找到具有用戶名的用戶。

當我運行此:

public function getProfile($username) { 

    $user = User::whereIn('username', function($query) { 
    $query->select('username') 
      ->from('user_profile') 
      ->where('username', $username); 
     })->get(); 
} 

我得到這個錯誤:未定義的變量$的用戶名,它並沒有被宣佈。 雖然我得到它的網址。

試圖獲得這兩個問題的答案。感謝幫助。

回答

1

由於變量範圍,您會收到錯誤。要使用一個變量,你必須與use它注入一個封閉的內部:爲答案

$user = User::whereHas('profile', function($q) use ($username){ 
    $q->where('username', $username); 
})->first(); 
+0

謝謝,只是去運行它:

$user = User::whereIn('username', function($query) use ($username) { $query->select('username') ->from('user_profile') ->where('username', $username); })->get(); 

但是,如果你有關係,你可以簡單地做到這一點。 – 2015-02-09 16:21:12