1

Active Record メソッドを使用してテーブルを更新し、次のようにタスクに完了のフラグを付けようとしています。

$this->db->update('tasks', array('status' => 'complete'))
           ->where('id', $task_id);

しかし、それは私にエラーを与えています:

Call to a member function where() on a non-object

ここに見えないのに何か問題があるのでしょうか?または、メソッドチェーンは更新では機能しませんか? メソッドチェーンに関するドキュメントはかなり薄い..

2行に分割するとうまくいきます...

$this->db->where('id', $task_id);
$this->db->update('tasks', array('status' => 'complete'));

しかし、ここでメソッドチェーンが機能するべきではありませんか?

PHP バージョン: 5.5.4 CI バージョン: 3

4

1 に答える 1

1

答えを見つけました。

update() と insert() はメソッドが呼び出されたときに実行されるため、db オブジェクトが返されないため、チェーンするものは何もありません。

この挿入ステートメントをチェーンする正しい方法は、それらを逆にすることです。

$this->db->where('id', $task_id)->update('tasks', array('status' => 'complete'));

または、更新関数で 3 番目のオプション パラメーターを使用するには、次のようにします。

$this->db->update('tasks', array('status' => 'complete'), array('id', $task_id));

これが他の誰かに役立つことを願っています。

http://forum.codeigniter.com/thread-1281-post-5822.htmlの CI コミュニティへのクレジット

于 2015-02-25T20:57:41.747 に答える