get-mysql查询雄辩模型中的builder语句

mzillmmw  于 2021-06-20  发布在  Mysql
关注(0)|答案(13)|浏览(260)

给出下表: `+----+

093gszye

093gszye1#

这是关系的最佳用例:

public function parent() {
    $this->belongsTo(self::class, 'parent_id');
}

public function children() {
    $this->hasMany(self::class, 'parent_id');
}
$parent = Model::with('children')->find(1); // with eager loading 
$parent->children;

希望这有帮助。

z3yyvxxp

z3yyvxxp4#

--+ | id | parent_id| Name | +----+

b4lqfgs4

b4lqfgs45#

--+` 我有一个有效的mysql查询:

SELECT * FROM packages

WHERE id = 3 

OR parent_id = 3 

OR parent_id = (SELECT parent_id FROM packages WHERE id = 3)

OR id = (SELECT parent_id FROM packages WHERE id = 3)

所以如果你更换 31 你得到的结果和预期的一样。
我的包模型中已经有以下函数:

<?php

public function related()
{
    $childParent = Package::select( 'parent_id' )->where( 'id', $this->id )->first();

    $query = $this->where( 'id', $this->id )
                  ->orWhere( 'parent_id', $this->id );

    if ( null !== $childParent->parent_id ) {
        $query
            ->orWhere( 'parent_id', $childParent->parent_id )
            ->orWhere( 'id', $childParent->parent_id );
    }

    return $query;
}

但这感觉。。。好。。。丑陋的。我来自symfony,在那里,使用orm查询生成器可以很容易地构建此类查询(并且只需要很少的代码行)。
我是不是错过了一个功能在拉雷维尔雄辩,使这个好和短?
编辑:我已经得到了这些函数,它们在不选择其他子函数和最终的父函数方面都有不足之处:

<?php
public function parent()
{
    return $this->belongsTo( Package::class, 'parent_id' )->withTrashed();
}

public function childs()
{
    return $this->hasMany( Package::class, 'parent_id' );
}
pb3skfrl

pb3skfrl7#

--+ | 1 | NULL | Parent 1| | 2 | 1 | Child 1| | 3 | 1 | Child 2| | 4 | 1 | Child 3| | 5 | NULL | Parent 2| | 6 | 1 | Child 4| | 7 | 1 | Child 5| | 8 | 1 | Child 6| +----+

dgtucam1

dgtucam19#

--+ | id | parent_id| Name | +----+

wnavrhmk

wnavrhmk10#

--+我想选择相同的数据,即使提供的id是否为父级。因此,如果提供的id=1(父项)或id=3(子项),我希望选择完全相同的数据:+----+

bkkx9g8r

bkkx9g8r12#

--+ | 1 | NULL | Parent 1| | 2 | 1 | Child 1| | 3 | 1 | Child 2| | 4 | 1 | Child 3| +----+

相关问题