我定义了以下关联:
class RecipesTable extends Table
{
$this->belongsToMany('Ingredients', [
'through' => 'RecipesIngredients',
'foreignKey' => 'recipe_id',
'targetForeignKey' => 'ingredient_id',
]);
class IngredientsTable extends Table
{
$this->belongsToMany('Recipes', [
'through' => 'RecipesIngredients',
'foreignKey' => 'ingredient_id',
'targetForeignKey' => 'recipe_id',
]);
class RecipesIngredientsTable extends Table
{
$this->belongsTo('Recipes');
$this->belongsTo('Ingredients');
$this->belongsTo('Units');
表'RecipesIngredients'具有以下结构:
id | recipe_id | ingredient_id | unit_id | ...
现在我提出类似下面的请求来获取食谱和相关成分。但没有单位。
$data = $this->Recipe->find('all')
->where('Recipe.id' => 55)
->contain(['Ingredient', ...])
->all();
我的问题是:如何在$this->Recipe
的通话中获取相关“单元”的数据?
我尝试了不同的包含->contain(['Ingredient' => ['Unit'], ...])
(等等),但这不起作用。 CakePHP只返回关联的ingredients
和'through'连接表的内容,而不链接到关联的units
。或者给出错过关联的错误。
答案 0 :(得分:2)
使用contain()
无法工作,至少不能使用belongsToMany
关联,因为正在为连接表创建的中间关联创建得太迟了渴望装载机识别它。
您可以做的是手动为联接表明确创建其他动态生成的hasMany
关联,例如在RecipesTable
类添加:
$this->hasMany('RecipesIngredients', [
'foreignKey' => 'recipe_id'
]);
然后你可以包含你的关联:
->contain(['RecipesIngredients' => ['Ingredients', 'Units']])