laravel 通过实体完成多对多关联查询

有两张表关联。分别:businessInfo(商家表)和favorable(优惠表)关联:businessInfo表的id对应favorable的shop_id商家表:b... 有两张表关联。
分别:businessInfo(商家表) 和 favorable(优惠表)
关联:businessInfo表的id 对应 favorable的shop_id
商家表:businessInfo表有个状态字段,state(0为隐藏/1为显示)
我再调用favorable(优惠表)的数据时,要查找businessInfo(商家表)state字段为1的商家。
favorable(优惠表)实体中这样写的:
public function ShopState()
{
return $this->belongsToMany('App\BusinessInfo','favorable_information','shop_id','id');
}

调用的方法的位置这样写的:
$tfi = FavorableInfo::take(10)->orderby("sort","asc")->get()->ShopState()->where("state","=",1)->get();

但是出现错误:
Call to undefined method Illuminate\Database\Eloquent\Collection::ShopState()

我应该怎样弄才能做到这个多表关联,麻烦大家了。
展开
 我来答
姜福泉bd
2015-12-02
知道答主
回答量:1
采纳率:0%
帮助的人:2万
展开全部
多对多的情况应该建三个表,一个商家表,一个优惠表,一个商家优惠对应关系表
例如下面的用法
多对多关系
多对多关系和之前的关系完全不一样,因为多对多关系可能出现很多冗余数据,用之前自带的表存不下了。
我们定义两个模型:Article 和 Tag,分别表示文章和标签,他们是多对多的关系。表结构应该是这样的:
article: id ... ...

tag: id ... ...

article_tag: article_id tag_id

在 Model 中使用:
<?php

class Tag extends Eloquent {

protected $table = 'tags';

public function belongsToManyArticle()

{

return $this->belongsToMany('Article', 'article_tag', 'tag_id', 'article_id');

}

}

需要注意的是,第三个参数是本类的 id,第四个参数是第一个参数那个类的 id。
使用跟 hasMany 一样:
$tagsWithArticles = Tag::take(10)->get()->belongsToManyArticle()->get();

这里会得到一个非常复杂的对象,可以自行 `var_dump()`。跟大家说一个诀窍,`var_dump()` 以后,用 Chrome 右键 “查看源代码”,就可以看到非常整齐的对象/数组展开了。
在这里给大家展示一个少见用法(奇技淫巧):
public function parent_video()

{

return $this->belongsToMany($this, 'video_hierarchy', 'video_id', 'video_parent_id');

}

public function children_video()

{

return $this->belongsToMany($this, 'video_hierarchy', 'video_parent_id', 'video_id');

}

对,你没有看错,可以 belongsToMany 自己。
追问
我就是按照这个弄得,不可以。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式