Php laravel模型中的处理关系
我正在学习Laravel php框架中的关系,并尝试构建此查询Php laravel模型中的处理关系,php,mysql,laravel,laravel-5.3,Php,Mysql,Laravel,Laravel 5.3,我正在学习Laravel php框架中的关系,并尝试构建此查询 SELECT*FROM users u internal JOIN link\u to\u将lts存储在u.id=lts.user\u id internal JOIN将s存储在lts.store\u id=s.store\u id,其中lts.privilege='Owner' 我在模型中构建了这个 将_链接到_store.php public function store() { return $this->bel
SELECT*FROM users u internal JOIN link\u to\u将lts存储在u.id=lts.user\u id internal JOIN将s存储在lts.store\u id=s.store\u id,其中lts.privilege='Owner'
我在模型中构建了这个
将_链接到_store.php
public function store()
{
return $this->belongsTo('App\Store');
}
public function user()
{
return $this->belongsTo('App\User');
}
User.php
public function store_links()
{
return $this->hasMany('App\Link_to_store');
}
Store.php
public function user_links()
{
return $this->hasMany('App\Link_to_store');
}
我尝试了这个查询,但它只将用户和链接链接到存储表
$personal\u stores=Auth::user()->store\u links->where('privilege','=','Owner')代码>
现在我也不知道如何加入存储表。有人能帮忙吗
模式是这样的
存储表
store\u id store\u name
用户表
id名称
链接到存储表
id store\u id user\u id privilege
我想store\u links
实际上是一个透视表。在这种情况下,您可以使用,这将自动处理透视表
为此,在您的用户
型号中,将存储功能更改为:
function stores() {
return $this->belongsToMany('App\Store', 'store_links', 'user_id', 'store_id')->withPivot('privilege');
}
由于存储
的主键不是id
,因此您必须在存储模型中使用以下行定义它:
protected $primaryKey = 'store_id';
现在,要为用户获取存储,只需调用
$stores = Auth::user->stores()->wherePivot('privilege', 'Owner')->get();
我想store\u links
实际上是一个透视表。在这种情况下,您可以使用,这将自动处理透视表
为此,在您的用户
型号中,将存储功能更改为:
function stores() {
return $this->belongsToMany('App\Store', 'store_links', 'user_id', 'store_id')->withPivot('privilege');
}
由于存储
的主键不是id
,因此您必须在存储模型中使用以下行定义它:
protected $primaryKey = 'store_id';
现在,要为用户获取存储,只需调用
$stores = Auth::user->stores()->wherePivot('privilege', 'Owner')->get();
我正在学习Laravel php框架中的关系,并尝试构建此查询
SELECT*FROM users u internal JOIN link\u to\u将lts存储在u.id=lts.user\u id internal JOIN将s存储在lts.store\u id=s.store\u id,其中lts.privilege='Owner'
您正在尝试在此处加入。您可以这样进行连接:
$stores = User::join('link_to_stores as lts', 'users.id', '=', 'lts.user_id')->join('stores as s', 'lts.store_id', '=', 's.id')->where('lts.privilege', 'Owner')->get();
但正如杰罗杰夫所指出的,在你的情况下,多对多关系似乎更有意义。区别在于关系实际上将执行2个查询(1个用于原始模型,1个用于关系)。然后,它会将相关模型附加到原始模型上(这非常方便)
我正在学习Laravel php框架中的关系,并尝试构建此查询
SELECT*FROM users u internal JOIN link\u to\u将lts存储在u.id=lts.user\u id internal JOIN将s存储在lts.store\u id=s.store\u id,其中lts.privilege='Owner'
您正在尝试在此处加入。您可以这样进行连接:
$stores = User::join('link_to_stores as lts', 'users.id', '=', 'lts.user_id')->join('stores as s', 'lts.store_id', '=', 's.id')->where('lts.privilege', 'Owner')->get();
但正如杰罗杰夫所指出的,在你的情况下,多对多关系似乎更有意义。区别在于关系实际上将执行2个查询(1个用于原始模型,1个用于关系)。然后,它会将相关模型附加到原始模型上(这非常方便)。可能会替换$personal\u stores=Auth::user()->store\u links->where('privilege','=','Owner')
与$personal_stores=Auth::user()->其中('privilege','=','Owner')->store_links()->store()
试试这个,告诉我输出是什么调用undefined方法illumb\Database\Query\Builder::store\u links()
可能替换$personal\u stores=Auth::user()->store\u links->where('privilege','=','Owner')
与$personal_stores=Auth::user()->其中('privilege','=','Owner')->store_links()->store()代码>尝试此操作并告诉我输出是什么调用undefined method Illumb\Database\Query\Builder::store\u links()
我已更新了对数据库布局的回答,这应该可以使关系正常工作。我得到了此列未找到:1054未知列“on子句”中的“stores.id”(SQL:选择
stores*,
Link\u-to\u-stores,user\u-id`aspivot\u-id
,Link\u-stores
作为pivot\u-id
,链接到\u-stores
特权
作为pivot\u特权
从门店内部加入链接到商店
id
=链接到商店
商店id
其中链接到商店
用户id
=1和链接到商店
特权
=所有者)`您是否已将$primaryKey
变量添加到存储
模型中?我已更新了对数据库布局的回答,这将使关系正常工作。我发现此列未找到:1054未知列'stores.id'in'on子句'(SQL:选择
stores*,
Link\u-to\u-stores,user\u-id`aspivot\u-id
,Link\u-stores
作为pivot\u-id
,链接到\u-stores
特权
作为pivot\u特权
从门店内部加入链接到商店
id
=链接到商店
商店id
其中链接到商店
用户id
=1和链接到商店
特权
=Owner)`您是否已将$primaryKey
变量添加到商店
模型中?