我试图建立像twitter这样的东西。当用户发布消息时,链接,提及和主题标签将链接到特定用户。我正在使用这段代码:
$post = preg_replace('/[@]+([A-Za-z0-9-_]+)/', '<a href="/$1" target="_blank">$0</a>', $post );
比如说,如果我发布了#34;新年快乐@josh #HappyNewYear#2015&#34;。然后帖子中的链接链接为<a href = "/josh">@josh</a>
。
但我有这条路:
Route::get('/profile{id}', 'UserController@getProfile');
如何通过查找具有用户名的用户来更改帖子中的链接。我有两个表users
和user_profile
,username
表中存在与user_profile
具有OneToOne关系的users
字段。我使用的是Sentry 2软件包。
我还有另一种选择。我可以更改路由以提供配置文件的用户名,但我再次找到具有用户名的用户。
当我运行时:
public function getProfile($username) {
$user = User::whereIn('username', function($query) {
$query->select('username')
->from('user_profile')
->where('username', $username);
})->get();
}
我得到了这个错误:未定义的变量$ username,它尚未声明。 我正在网址中找到它。
尝试获得两个问题的答案。谢谢你的帮助。
答案 0 :(得分:1)
由于范围可变,您收到错误。要在闭包内使用变量,必须使用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();