我正在尝试构建类似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
字段存在于与users
具有OneToOne关系的user_profile
表中。我用的是哨兵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();