我正在尝试使用飞行关联来减少我检索的数据,但我正在使用的模型与其他具有重命名字段的模型相关联,因为我有2个与之关联的相同模型
所以,这是模型,比如'test',它有两个'user'字段,都与User模型有关。
在模型中:
var $belongsTo = array(
'User' => array(
'className' => 'User',
'foreignKey' => 'user_id'
),
'User_Watched' => array(
'className' => 'User',
'foreignKey' => 'user_id_watched'
)
);
当我检索与'test'相关的数据时,我想只检索链接到'User'和'User_Watched'字段的特定数据,而不需要任何其他嵌套信息。
但是当我这样做时:
$this->User->unbindModel(array('hasMany' => array('something1', 'something2')), false);
然后,something1和something2数据不会出现在模型'test'的'User'字段中,但仍会在'User_watched'字段中检索。
我是否可以为“User_watched”字段检索不需要的数据?
希望这有道理......:)
答案 0 :(得分:2)
使用飞行关联进行修剪 我检索的数据
好主意。
'foreignKey' => 'user_id_watched'
应该是:
'foreignKey' => 'user_watched_id'
。
编辑1:根据我目前的理解,至少这是有意义的。如果user_id
是正确的外键(FK),哪个cakephp用于取消绑定关系,但user_id_watched
不是,则解释了您描述的行为。
编辑2:可包含的行为为您提供了另一种用于控制相关模型的工具。
答案 1 :(得分:2)
KcYxA,
在这种情况下,可控行为可能会有很大帮助,正如本杰明所说,你的“查找”查询看起来像:
$this->User->find('first', array(
'conditions' => array('User.id' => $id),
'contain' => array('UserWatched')
));
在这种情况下,您不必使用unbindModel方法。在此示例中,您将获得User和UserWatched数据。 如果您只需要“查找”中的用户数据,请告诉Cake“$ this-> User-> contains();”所以用户模型不会更进一步。
答案 2 :(得分:0)
在fly中更改$ primaryKey,运行控制器 样品:
//模型
// ...
class PreProductoDescripcion扩展了AppModel {
/**
* Primary key field
*
* @var string
*/
public $primaryKey = 'id_producto_descripcion';
//....
//....
}
类SenasaPedidosDetalles扩展了AppModel {
/**
* Display field
*
* @var string
*/
public $displayField = 'cod_tango';
public $belongsTo = array(
'SenasaPedidos' => array(
'className' => 'SenasaPedidos',
'foreignKey' => 'senasa_pedidos_id',
'conditions' => '',
'fields' => '',
'order' => ''
),
'PreProductoDescripcion' => array(
'className' => 'PreProductoDescripcion',
'foreignKey' => 'cod_tango',
//'conditions' => array('SenasaPedidosDetalles.cod_tango' => 'PreProductoDescripcion.codigo'),
'fields' => '',
'order' => ''
)
);
// ...
#// Controller Fly
//...
$this->SenasaPedidos->Behaviors->load('Containable');
$this->SenasaPedidos->SenasaPedidosDetalles->PreProductoDescripcion->primaryKey = 'codigo';
$datos = $this->SenasaPedidos->find(
'first', array(
'fields' => array( 'SenasaPedidos.*' ),
'conditions' => array( 'SenasaPedidos.id' => $id ),
'contain' => array(
'Usuarios' => array(
'fields' => array( 'Usuarios.apellido_nombre' )
),
'Clientes' => array(
'fields' => array( 'Clientes.razon_social' )
),
'Provincias' => array(
'fields' => array( 'Provincias.nombre' )
),
'Transportes' => array(
'fields' => array( 'Transportes.razon_social' )
),
'SenasaPedidosDetalles' => array(
'fields' => array( 'SenasaPedidosDetalles.*' ),
'PreProductoDescripcion' => array(
'fields' => array(
'PreProductoDescripcion.id_producto_descripcion',
'PreProductoDescripcion.descripcion'
)
)
),
)
));
//...