我正在尝试建立类似twitter的东西。当用户发布消息时,链接,提及和主题标签将链接到特定用户。我正在使用这段代码:
$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}', 'UserController@getProfile');
如何通过查找具有用户名的用户来更改帖子中的链接。我有两个表
users
和user_profile
,并且username
字段存在于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();
}
我收到以下错误:未定义的变量$ username,尚未声明。
当我在URL中获取它时。
试图获得两个问题的答案。感谢帮助。
最佳答案
由于变量范围而导致错误。要在闭包内部使用变量,必须使用use
注入它:
$user = User::whereIn('username', function($query) use ($username) {
$query->select('username')
->from('user_profile')
->where('username', $username);
})->get();
但是,如果您有关系,则可以执行以下操作:
$user = User::whereHas('profile', function($q) use ($username){
$q->where('username', $username);
})->first();