我想在Laravel5.6中搜索类别时获取与商店的关系值

时间:2018-08-02 04:54:38

标签: php laravel laravel-5 eloquent

谢谢您查看我的问题。

搜索类别时,我想以多对多的方式检索与商店的标签表关系的信息

我创建了Store-tableCategory-tableTag-tablestore-tablecategory-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));
});

1 个答案:

答案 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;