Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
cakephp-如何从模型中获取数据->;型号->;模型类型关系_Php_Cakephp - Fatal编程技术网

cakephp-如何从模型中获取数据->;型号->;模型类型关系

cakephp-如何从模型中获取数据->;型号->;模型类型关系,php,cakephp,Php,Cakephp,我有三种型号,设备,它们有许多预订,而反过来又有许多PaypalTransaction,我正试图找到属于预订的PaypalTransactions,它属于我正在处理的特定列表,并且是在不到一天前创建的。所有这些都在Listings控制器中 所以在我的列表控制器中 $oneDayAgo = date('Y-m-d H:i:s', strtotime('-1 day')); $toBeConfdBookings = $this->Equipment->Booking->Paypa

我有三种型号,设备,它们有许多预订,而反过来又有许多PaypalTransaction,我正试图找到属于预订的PaypalTransactions,它属于我正在处理的特定列表,并且是在不到一天前创建的。所有这些都在Listings控制器中

所以在我的列表控制器中

$oneDayAgo = date('Y-m-d H:i:s', strtotime('-1 day')); 
$toBeConfdBookings = $this->Equipment->Booking->PaypalTransaction->find('all', array('conditions' => array('PaypalTransaction.created' > $oneDayAgo)));
所有的模型都具有蛋糕烘焙所创建的适当关系,但最终以$tobeconfdbooks结束的都是错误的


有人告诉我我做错了什么吗?

按照您现在的方式,您基本上只需调用
PaypalTransaction
模型,并请求其find返回您最后一天的所有交易

$this->FirstModel->SecondModel->ThirdModel
并不意味着将结果从第一个模型连接到第二个模型,然后再连接到第三个模型,它只是帮助您加载链接模型的一种方法,而不是使用
$this->loadModel('ThirdModel')
加载链接模型

因此,您仍然需要根据您想要执行的操作放置
条件。例如,如果只是一个模型链接(假设$this->Booking设置为记录),则可以执行以下操作:

$this->Booking->PaypalTransaction->find('all', array(
    'conditions' => array(
        'PaypalTransaction.created >' => $oneDayAgo,
        'PaypalTransaction.booking_id => $this->Booking->id
    )
);
除非您的第三个模型包含前两个模型的键,否则您不能将其扩展到另外两个模型,我怀疑这两个模型都包含键(可能不应该)

CakePHP将在查找belongsTo和hasOne关联的条件中自动绑定模型,其余2种类型则需要自动绑定


这是一点额外的工作,但你很快就会习惯。

在处理更深层次的关联时,我认为你应该看看这个链接。您可以按bindModel从表中检索数据


简单回答:

$oneDayAgo = date('Y-m-d H:i:s', strtotime('-1 day'));
$this->loadModel('Booking'); // if neccessary
$paypalTransactions = $this->Booking->find('all', array(
    'conditions' => array(
        'Booking.equipment_id' => $equipmentId
    ),
    'contain' => array(
        'Equipment'
    ),
    'joins' => array(
        array('table' => 'paypal_transactions',
            'alias' => 'PaypalTransaction',
            'type' => 'INNER',
            'conditions' => array(
                'PaypalTransaction.booking_id = Booking.id',
                "PaypalTransaction.created > '".$oneDayAgo."'"
            )
    )
));
您不能在三个这样深的模型上运行
find()
。相反,尝试只加载模型,然后运行
find()

(只能在加载的模型或与加载的模型直接相关的模型上运行
find()
s。)


回答我第一次如何解释你的问题:

$oneDayAgo = date('Y-m-d H:i:s', strtotime('-1 day'));
$this->loadModel('Booking'); // if neccessary
$paypalTransactions = $this->Booking->find('all', array(
    'conditions' => array(
        'Booking.equipment_id' => $equipmentId
    ),
    'contain' => array(
        'Equipment'
    ),
    'joins' => array(
        array('table' => 'paypal_transactions',
            'alias' => 'PaypalTransaction',
            'type' => 'INNER',
            'conditions' => array(
                'PaypalTransaction.booking_id = Booking.id',
                "PaypalTransaction.created > '".$oneDayAgo."'"
            )
    )
));
通常,当您想要获取相关的结果时,它非常简单-只需使用

但是,您要做的是获取相关模型数据,并限制基于相关模型的结果。因此,因为Containable会创建单独的查询,所以您不能基于相关模型进行限制-在这种情况下,您需要利用
连接

代码示例:

$oneDayAgo = date('Y-m-d H:i:s', strtotime('-1 day'));
$this->loadModel('Booking'); // if neccessary
$paypalTransactions = $this->Booking->find('all', array(
    'conditions' => array(
        'Booking.equipment_id' => $equipmentId
    ),
    'contain' => array(
        'Equipment'
    ),
    'joins' => array(
        array('table' => 'paypal_transactions',
            'alias' => 'PaypalTransaction',
            'type' => 'INNER',
            'conditions' => array(
                'PaypalTransaction.booking_id = Booking.id',
                "PaypalTransaction.created > '".$oneDayAgo."'"
            )
    )
));
上面的代码基本上是这样的:

  • 查找:查找
    $equipmentId
  • 包含:还检索相关设备的数据(可选)
  • 加入:将预订和Paypal交易的结果限制为仅在一天前发生交易的结果(并检索交易数据)

  • 你所说的你想要的和你正在尝试的不相关-你想要的设备和/或预订的条件在哪里?可控制是一种方式,我也会推荐它