У меня проблема, когда Laravels Eloquent ORM полностью игнорирует user_id
.
Голуби Стол
id user_id name father_id mother_id ringnumber
gender color created_at updated_at landcode
(это мои столбцы (если кто-то знает, как лучше отформатировать это, дайте мне знать))
У меня есть поиск, из которого маршрутизируется поисковый параметр q
в мой SearchController.php, в котором эта функция живет:
namespace App\Http\Controllers;
use App\Pigeon;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Input;
class SearchController extends Controller
{
public function index()
{
$q = Input::get('query');
$userId = Auth::user()->id;
$pigeons = Pigeon::where([
['user_id', '=', $userId],
['name','LIKE','%'.$q.'%']
])
->orWhere('ringnumber','LIKE','%'.$q.'%')
->sortable()
->paginate(15);
dd($pigeons);
return view('backend.pigeon.pigeonlist')->with('pigeons', $pigeons);
}
}
По какой-то причине этот построитель запросов Eloquent полностью игнорирует 'user_id', '=', $userId
, и это важная часть, потому что я хочу искать голубей только для текущего вошедшего в систему пользователя.
Ниже приведен результат такого запроса, проблема в том, что существуют голуби со всеми видами user_id
, а не только один пользователь, который их искал.
LengthAwarePaginator {#259 ▼
#total: 150
#lastPage: 10
#items: Collection {#267 ▼
#items: array:15 [▼
0 => Pigeon {#268 ▶}
1 => Pigeon {#269 ▶}
2 => Pigeon {#270 ▶}
3 => Pigeon {#271 ▶}
4 => Pigeon {#272 ▶}
5 => Pigeon {#273 ▶}
6 => Pigeon {#274 ▶}
7 => Pigeon {#275 ▶}
8 => Pigeon {#276 ▶}
9 => Pigeon {#277 ▶}
10 => Pigeon {#278 ▶}
11 => Pigeon {#279 ▶}
12 => Pigeon {#280 ▶}
13 => Pigeon {#281 ▶}
14 => Pigeon {#282 ▶}
]
}
#perPage: 15
#currentPage: 1
#path: "http://mywebsite.test/pigeon/search"
#query: []
#fragment: null
#pageName: "page"
+onEachSide: 3
}
Небольшое примечание, я получил некоторую информацию отсюда: Как создать множественный запрос where, используя Laravel Eloquent?
Проблема решена:
Сначала у меня был orWhere, который отверг «где», так что это было довольно глупо с моей стороны.
Во-вторых, моя настоящая проблема заключалась в том, что я пытался получить только записи для текущего вошедшего в систему пользователя, который работает через этот код:
$pigeons = Pigeon::where('user_id', \Auth::id())
->where(function($query) use ($q) {
$query->where('name', 'LIKE', '%'. $q .'%');
})
->sortable()
->paginate(15);