如何仅从登录的用户数据中搜索搜索输入中的列?

时间:2019-05-27 11:54:02

标签: php mysql laravel

如何在输入搜索查询中仅获取登录用户的列?意味着我只搜索他存储的数据

$restaurants = Restaurant::where('title', 'like', '%'.$query.'%')

餐厅在用户模型中具有user_id列:

public function restaurants() { 
    return $this->hasMany('App\Restaurant'); 
} 

在餐厅模型中:

public function user() { 
    return $this->belongsTo('App\User'); 
}

3 个答案:

答案 0 :(得分:3)

您可以尝试一下。

$user = \Auth::user();
$restaurants = Restaurant::where('title', 'like', '%'.$query.'%')
                         ->where("user_id", $user->id)
                         ->get();

如果要添加全局范围的还原模型,则应使用全局范围

使用此解决方案,您只需要添加具有还原模型的 Global Scope ,然后对于每个与还原相关的事务,用户只能获取/更新/删除自己的条目。

App / Scopes / UserScope.php

<?php

namespace App\Scopes;

use Illuminate\Database\Eloquent\Scope;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Builder;

class UserScope implements Scope
{
    /**
     * Apply the scope to a given Eloquent query builder.
     *
     * @param  \Illuminate\Database\Eloquent\Builder  $builder
     * @param  \Illuminate\Database\Eloquent\Model  $model
     * @return void
     */
    public function apply(Builder $builder, Model $model)
    {
        $builder->where('user_id', \Auth::user()->id);
    }
}

美食:在您的模型中 Restaurant.php

<?php

namespace App;

use App\Scopes\UserScope;
use Illuminate\Database\Eloquent\Model;

class Restaurant extends Model
{
    /**
     * The "booting" method of the model.
     *
     * @return void
     */
    protected static function boot()
    {
        parent::boot();

        static::addGlobalScope(new UserScope);
    }
}

答案 1 :(得分:0)

您可以使用Auth Facade获得当前用户:

    $currentUser = \Auth::user();//Get current User Model
    $restaurants = Restaurant::where([
    ['user_id','=',$currentUser->id],
    ['title', 'like', '%'.$query.'%']
])->get();

未经测试,
希望这会有所帮助

编辑:立即测试

您应该使用get()方法或(替换为符合您条件的get()行。

答案 2 :(得分:0)

由于存在关系,您可以编写如下代码

$user = Auth::user();
if ($user) {
    $restaurants = $user->restaurants()->where('title', 'like', '%'.$query.'%')->get();
}