谢谢您查看我的问题。
搜索类别时,我想以多对多的方式检索与商店的标签表关系的信息
我创建了Store-table
,Category-table
,Tag-table
。
store-table
和category-table
通过多对多关系连接。 tag-table
相同。
我能够搜索类别并获取有关业务的信息,但是我不知道如何获取与商店相关的标签的信息。
因此,我尝试了这个想法。 search categories → get storeID from relation data→ storeID search → return shop data that hit.
但是,我不知道如何在通过类别搜索获取的商店数据中获取storeID
如何编写代码? 请帮助我。
对不起,打败我的英语。
应用程序\商店
use Illuminate\Database\Eloquent\Model;
class Store extends Model
{
protected $fillable = ['name','location', 'price', 'open_time',
'closed_day'];
protected $table = 'stores';
public function photos(){
return $this->hasMany(StorePhoto::class);
}
public function categories(){
return $this->belongsToMany(Category::class,'category_store','category_id','store_id');
}
public function tags(){
return $this->belongsToMany(Tag::class, 'store_tag', 'tag_id', 'store_id');
}
}
应用\类别
protected $fillable = ['store_id', 'category_id'];
public function stores()
{
return $this->belongsToMany(Store::class,'category_store','store_id','category_id');
}
应用\标签
protected $fillable = ['store_id', 'tag_id'];
public function stores()
{
return $this->belongsToMany(Store::class, 'store_tag', 'store_id', 'tag_id');
}
资源/类别
class Category extends JsonResource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function toArray($request)
{
return [
'id' => $this->id,
'name' => $this->name,
'store' => $this->stores,
];
}
}
web.php
use App\Category;
use App\Http\Resources\Category as CategoryResource;
Route::get("/store/api/category", function (Request $request) {
$search_category = $request->get('category_id');
return new CategoryResource(Category::find($search_category));
});
答案 0 :(得分:0)
您可以使用点符号来渴望加载嵌套关系:
$category = Category::with('stores.tags')->find($request->get('category_id'));
然后可以在与Store
相关的每个Category
模型上访问这些标签:
// create a single flattened array of all the tags
$tags = $category->stores->flatMap->tags;