我在名为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。这可能吗?
答案 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()
。在那方面并不完全确定。