通过静态方法返回关系结果

时间:2015-03-04 14:43:22

标签: php laravel laravel-4 eloquent

我正试图在我雄辩的模型上提供额外的静态“查找”方法,如下所示:

public static function findBySku($sku)
{
    // Using new self; provides the same empty collection results
    $instance = new static;

    // Using $instance->sku()->newQuery()->get() also returns the same empty collection
    $results = $instance->sku()->get();

    /*
    * This returns an empty collection, however there are records inside the 
    * relationship database table?
    */
    dd($results);
}

所以我可以使用:Inventory::findBySku($sku);

这是关系:

public function sku()
{
    return $this->hasOne('Stevebauman\Maintenance\Models\InventorySku', 'inventory_id', 'id');
}

我知道关系本身不是问题,因为这会从数据库表中返回结果:

Inventory::find(1)->sku()->get();

任何人都有任何想法为什么这不起作用?

我知道这可能是因为我从一个静态实例调用一个非静态方法,但是为什么它会返回一个结果集合而不会抛出错误?

谢谢!

1 个答案:

答案 0 :(得分:2)

坚持下去,想通了,道歉!

Eloquent关系有一个方法getRelated()来访问相关的模型实例。然后我可以调用我需要的方法,例如:

public static function findBySku($sku)
{
    $instance = new static;

    // Using the getRelated() method allows me to run queries on the related model
    $results = $instance->sku()->getRelated()->get();

    dd($results);
}

只是一种奇怪的解决方法,因为您认为访问关系本身会为您提供正确的查询。

我希望将来帮助某人!