Php laravel模型中的处理关系

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

我正在学习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->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`as
pivot\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`as
pivot\u-id
Link\u-stores
作为
pivot\u-id
链接到\u-stores
特权
作为
pivot\u特权
门店内部加入
链接到
商店
id
=
链接到商店
商店id
其中
链接到商店
用户id
=1和
链接到商店
特权
=Owner)`您是否已将
$primaryKey
变量添加到
商店
模型中?