我正在尝试建立类似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');


如何通过查找具有用户名的用户来更改帖子中的链接。我有两个表usersuser_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();

09-05 18:11