Laravel查询关系模型

时间:2015-02-09 15:48:47

标签: php mysql laravel laravel-4

我试图建立像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');

如何通过查找具有用户名的用户来更改帖子中的链接。我有两个表usersuser_profileusername表中存在与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,它尚未声明。 我正在网址中找到它。

尝试获得两个问题的答案。谢谢你的帮助。

1 个答案:

答案 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();