2011-02-16 20 views
0

首先,我一直在使用CakePHP,並且我對API很滿意。我很肯定這將是一個臉部手掌錯誤,但我需要一些新鮮的眼睛,因爲我一直堅持了一個多小時。簡單CakePHP ActiveRecord保存問題:爲什麼該字段保存`NULL`而不是我賦值的值?

我有三種型號,User,JobCompany

  1. Company的hasMany User
  2. Company的hasMany Job

有時,當用戶更新工作記錄,用戶需要更改作業的company_id場。發生這種情況時,我也有要求更改用戶自己的company_id字段。因此,UserJob實際上都將被重新分配給不同的公司。

JobsController的CRUD更新方法,我已經加入此邏輯:

$this->Job->User->read(NULL, $this->Session->read('User.id')); 
$this->Job->User->set('company_id', $this->data['Job']['company_id']); 
$this->Job->User->save(); 

我已經使用典型的調試技術驗證,像var_dump()$this->Session->read('User.id')包含一個適當的值,並且$this->data['Job']['company_id']包含正確的值,該值是從表單助手提交的。

正確User記錄被更新,因爲modified時間戳在表中表示,它是如此,但company_id字段被設置爲NULL而不是從數據陣列的正確company_id

有趣的是,上面的代碼後,我保存Job記錄,並且它確實獲得與正確company_id(使用相同$this->data陣列)更新。

它只是$this->Job->User->save()似乎將NULL值傳遞到表。

<捂臉類型=「跛腳」 >

原來在應用程序流程的另一點與所述代碼monkeyed一個新的初級dev的。這個dev試圖完成同一張票,並且錯誤地執行了一個加載了NULL數據的保存方法(作業數據保存,這就是爲什麼我沒有注意到,因爲我工作之前作業保存.. )。

無論如何,走下SQL轉儲讓我發現錯誤,所以應該給@dhofstet指出我正確的調試路徑。感謝善良的版本控制。

< /捂臉>

+1

你檢查生成的SQL語句? – dhofstet 2011-02-17 06:37:50

+0

@dhofstet不!無論出於何種原因,我是一個白癡!我現在檢查一下。 – Stephen 2011-02-17 15:28:02

回答

1

是否檢查$這個 - >數據[ '工作'] [ 'COMPANY_ID']不爲空? 也許驗證有問題。你有沒有嘗試saveField而不是設置&保存?

+0

「我已經使用典型的調試技術進行了驗證,如`var_dump()```$ this-> data ['Job'] ['company_id']`包含從窗體幫助程序提交的正確值「。 – Stephen 2011-02-16 16:38:36

1

爲什麼這麼複雜?

簡單

$this->Job->User->save($this->data); 

意願的伎倆

假設您填寫與陣列[用戶] [COMPANY_ID]等

相關問題