Eloquent有很多关系 - 我可以通过单独的键值来检索项目吗?

时间:2017-05-23 13:51:02

标签: php laravel eloquent relationship

我在名为Supplier的模型和名为SupplierMeta的模型之间建立了一个hasMany关系。

SupplierMeta链接到具有以下结构的表:

add_filter( 'woocommerce_product_add_to_cart_text', 'woo_custom_cart_button_text',999 );

且供应商模型定义了以下关系:

id, supplier_id, name, value

关系本身运作正常,但我想要做的是定义另一个在" name"字段并返回值。我希望它以这种格式工作:

public function meta() {
    return $this->hasMany('Model\SupplierMeta');
}

这将返回"值"相关SupplierMeta对象的字段,如果存在,或以其他方式返回false。这可能吗?

2 个答案:

答案 0 :(得分:0)

如果您想按元名称查找供应商,请使用whereHas()方法:

Supplier::whereHas('meta', function ($q) use($metaName) {
    $q->where('name', $metaName);
})->get();

答案 1 :(得分:0)

以下是您可以使用的示例宏,可让您执行$supplier->meta->meta('field_name');

Collection::macro('meta', function ($name) {
    return $this->first(function ($item) use ($name) {
        return $item->name == $name;
    });
});

然后,您可以向供应商模型添加getMeta()方法:

public function getMeta($name) {
    return $this->meta->meta($name);
}

这可以让你$supplier->getMeta('field_name');

我不完全确定如何使用它作为$supplier->meta->some_field这样的属性的最后一部分,但是,这对我来说有点太神奇了。

我认为您希望在模型上实施一些__get()方法或getMetaAttribute()。在那方面并不完全确定。