Eloquent 模型列作为属性
Eloquent model columns as properties
我正在与 laravel 和 eloquent 合作,很抱歉,如果这是一个愚蠢的问题,我已经在 google 上进行了一些搜索,但找不到像这样。
我有一个 Company 模型,它与 CompanyProperties 模型有 "hasMany" 关系。 CompanyProperties 有两列:"name" 和 "value".
id | Name | Value
1 | primaryColor | #000
2 | secondaryColor | #333
当我通过 Company::all() 获得公司时;它完美地加载了每家公司的 CompanyProperties。每个 CompanyProperty returns 一个集合,我可以使用 $company->CompanyProperties[0...n].
访问它
如果可能的话,我想做的是使用 "name" 列值作为 属性 或数组访问 CompanyProperties。使用上面我的 table 的示例:
$公司->公司属性['primaryColor']
要么
$公司->公司属性['secondaryColor']
有办法吗?
哦,是的,在此先感谢您。 我很感激您对此提出的任何建议(即使我必须更改 "properties" 方法,哈哈)。
Laravel 5.1及之前:使用lists
方法
Laravel 5.2:使用pluck
$properties = $company->companyProperties()->pluck('Value', 'Name');
这个returns一个数组,其中值是第一个参数('Value'
),键是第二个参数('Name'
),例如
$value = $properties['primaryColor']; // '#000'
但是,这可能效率很低,因为您要 运行 查询您获取的每个公司。如果只是一家或几家公司没问题,但考虑到您正在使用 Company:all()
我会建议预先加载:
$companies = Company::all();
$companies->load([
'companyProperties'
]);
这将在单个查询中获取所有公司的属性。现在对于每个 $company,$company->companyProperties
是一个 Collection. So you can use the keyBy 方法:
foreach ($companies as $company) {
$properties = $company->companyProperties->keyBy('Name');
$value = $properties['primaryColor']->Value; // '#000'
}
注意语法略有不同,$properties['primaryColor']
仍然是一个companyProperties对象,所以你必须得到属性->Value
我正在与 laravel 和 eloquent 合作,很抱歉,如果这是一个愚蠢的问题,我已经在 google 上进行了一些搜索,但找不到像这样。
我有一个 Company 模型,它与 CompanyProperties 模型有 "hasMany" 关系。 CompanyProperties 有两列:"name" 和 "value".
id | Name | Value
1 | primaryColor | #000
2 | secondaryColor | #333
当我通过 Company::all() 获得公司时;它完美地加载了每家公司的 CompanyProperties。每个 CompanyProperty returns 一个集合,我可以使用 $company->CompanyProperties[0...n].
访问它如果可能的话,我想做的是使用 "name" 列值作为 属性 或数组访问 CompanyProperties。使用上面我的 table 的示例: $公司->公司属性['primaryColor'] 要么 $公司->公司属性['secondaryColor']
有办法吗?
哦,是的,在此先感谢您。 我很感激您对此提出的任何建议(即使我必须更改 "properties" 方法,哈哈)。
Laravel 5.1及之前:使用lists
方法
Laravel 5.2:使用pluck
$properties = $company->companyProperties()->pluck('Value', 'Name');
这个returns一个数组,其中值是第一个参数('Value'
),键是第二个参数('Name'
),例如
$value = $properties['primaryColor']; // '#000'
但是,这可能效率很低,因为您要 运行 查询您获取的每个公司。如果只是一家或几家公司没问题,但考虑到您正在使用 Company:all()
我会建议预先加载:
$companies = Company::all();
$companies->load([
'companyProperties'
]);
这将在单个查询中获取所有公司的属性。现在对于每个 $company,$company->companyProperties
是一个 Collection. So you can use the keyBy 方法:
foreach ($companies as $company) {
$properties = $company->companyProperties->keyBy('Name');
$value = $properties['primaryColor']->Value; // '#000'
}
注意语法略有不同,$properties['primaryColor']
仍然是一个companyProperties对象,所以你必须得到属性->Value