0

のコンストラクターをオーバーライドしている次のモデルがありますbase class

class Tasks extends BaseTasks {    

    public function __construct($currentUser, $taskId, $startTime) {
        parent::__construct();
        //........
        //set all parameters to their respective fields
        //........
    }

以下を使用して手動でタスクを作成すると、$task= new Task('test_user',1,'10:15');すべて正常に動作します。

問題は、データベースからすべてのタスクをフェッチするときです。

 $tasks = TasksQuery::create()->find();

エラーが発生します:

Warning: Missing argument 1 for Tasks::__construct(), called in...
Warning: Missing argument 2 for Tasks::__construct(), called in...
Warning: Missing argument 3 for Tasks::__construct(), called in...

スタック トレースは、Propel がコンストラクターを呼び出してから populateObject を呼び出し、タスク オブジェクトにデータを返すことを示しています。

Call Stack:
    //...other function calls
    0.1254   19326792  14. call_user_func(array (0 => 'TasksPeer', 1 => 'populateObject'), array (0 => '98', 1 => '2013-07-16 15:25:00', 2 => 'daily',...other params...) /library/propel1_6/formatter/PropelObjectFormatter.php:87
    0.1254   19326824  15. BaseTasksPeer::populateObject($row = array (0 => '98', 1 => '2013-07-16 15:25:00', ...other params...) /library/propel1_6/formatter/PropelObjectFormatter.php:87
    0.1254   19330456  16. Tasks->__construct($currentUser = ???, $taskId = ???, $startTime = ???) /models/om/BaseTasksPeer.php:485

ここで、次のようなプリミティブ データ型の代わりにコンストラクターで値オブジェクトを使用することにしたとします。

class Tasks は BaseTasks を拡張します {

    public function __construct(User $currentUser, $taskId, StartTime $startTime) {
        parent::__construct();
        //........
        //set all parameters to their respective fields
        //........
    }

コンストラクターの呼び出しは致命的なエラーで失敗します!! これを解決する方法はありますか?

4

2 に答える 2

0

Base クラスはコンストラクターを呼び出しますが、引数はありません。警告を回避するには、引数をオプションにします

public function __construct($currentUser = null, $taskId = null, $startTime = null) {
    ... 
}

もちろん、null の代わりに、アプリケーションの要求に応じて適切な値を使用できます。

于 2013-07-22T07:12:06.100 に答える