Привет, ребята, мне нужно запросить глубокие отношения ...
Моя store
Модель
<?php
namespace App\Model;
use Illuminate\Database\Eloquent\Model;
class Store extends Model
{
protected $table = 'stores';
public function address(){
return $this->morphOne('App\Model\Address', 'addressable');
}
}
Моя Address
Модель
class Address extends Model
{
protected $table = 'address';
protected $fillable = [
'province_id',
'city_id',
'brgy_id',
'street_lot_blk',
'longitude',
'latitude'
];
public function addressable(){
return $this->morphTo();
}
public function province(){
return $this->hasOne('App\Model\Province', 'id', 'province_id');
}
public function city(){
return $this->hasOne('App\Model\City', 'id', 'city_id');
}
public function brgy(){
return $this->hasOne('App\Model\Brgy', 'id', 'brgy_id');
}
}
Мояprovince
Модель
<?php
namespace App\Model;
use Illuminate\Database\Eloquent\Model;
class Province extends Model
{
protected $table = 'refprovince';
}
Мой запрос
$request = app()->make('request');
return response()->json([
'stores' => Store::where('name', 'LIKE', '%'. $request->name . '%')
->with(['address.province', 'address.city', 'address.brgy'])
->take(10)->get()
]);
result
см. Прилагаемое фото
![enter image description here](https://i.stack.imgur.com/9a5at.png)
Проблема в том, что если пользователь введет имя магазина, он вернет только имя магазина, а если пользователь введет «Камарины», он вернет магазин, у которого в провинции есть слово «Камарины».
Мой код выглядит следующим образом ... но он не работает.
$results = Store::where('name', 'LIKE', '%'. $request->name . '%')
->with(['address.province' => function($query) use ($request) {
$query->where('provDesc', 'LIKE', '%'. $request->name . '%');
}])
->take(10)->get();
return response()->json([
'stores' => $results
]);
Я не знаю, возможно ли это, просто скажите мне, чтобы я мог реструктурировать свойбаза данных.TY
Обновления: все еще не работает с этим кодом.
$request = app()->make('request');
$stores = Store::where('name', 'LIKE', "%{$request->name}%")
->orWhereHas('address.province', function ($query) use ($request) {
$query->where('provDesc', 'LIKE', "%{$request->name}%");
})
->with(['address.province', 'address.city', 'address.brgy'])
->get();
![enter image description here](https://i.stack.imgur.com/5gDTG.png)