如何在输入搜索查询中仅获取登录用户的列?意味着我只搜索他存储的数据
$restaurants = Restaurant::where('title', 'like', '%'.$query.'%')
餐厅在用户模型中具有user_id列:
public function restaurants() {
return $this->hasMany('App\Restaurant');
}
在餐厅模型中:
public function user() {
return $this->belongsTo('App\User');
}
答案 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();
}