Как искать в столбцах поиска только из данных пользователя? - PullRequest
0 голосов
/ 27 мая 2019

Как я получу только столбцы зарегистрированного пользователя по входному поисковому запросу?Означает, что я ищу только те данные, которые он сохранил

$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 ]

3 голосов
/ 27 мая 2019

Вы можете попробовать это.

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

Если вы хотите добавить модель Restorent с глобальной областью действия, вам следует использовать Global Scope .

С этим решением,вам просто нужно добавить Global Scope с моделью Restorent, и после этого для каждой связанной с восстановлением транзакции пользователь может получать / обновлять / удалять только свои собственные записи.

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);
    }
}
0 голосов
/ 27 мая 2019

Поскольку у вас есть отношения, вы можете написать код, подобный этому

$user = Auth::user();
if ($user) {
    $restaurants = $user->restaurants()->where('title', 'like', '%'.$query.'%')->get();
}
0 голосов
/ 27 мая 2019

Вы можете получить текущего пользователя с помощью Auth Facade:

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

Не тестировалось,
Надеюсь, это поможет

Редактировать: сейчас протестировано

Вам следует использовать метод get () или (альтернативы get () строки, соответствующие вашим условиям.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...