如何使用Agile Toolkit从Model中提取特定列表

时间:2013-05-16 08:43:19

标签: php user-interface frameworks atk4

我正在使用Agile Toolkit

我有一个Model_Product

class Model_Product extends Model_Table {
public $table="product";
function init(){
    parent::init();

    $this->addField('name')->mandatory(true);
    $this->addField('price')->mandatory(true)->type('money');
    $this->addField('user_id')->refModel('Model_User')
        ->defaultValue($this->api->auth->get('id'));    
    //$this->hasOne('User',null,'email'); => send me an error message
}
}

和Model_User

class Model_User extends Model_Table {
public $table="user";

function init(){
    parent::init();

    $this->addField('first_name')->mandatory('Prénom nécesssaire');
    $this->addField('last_name')->mandatory('Nom nécesssaire');
    $this->addField('email')->mandatory('entrez un email valide');
    $this->addField('nationality')->mandatory('nécessaire')->enum(array('FR','EN','US'));
    $this->addField('birthday')->defaultValue(date('Y-m-d'))->type('date');
    $this->addField('is_admin')->type('boolean');       
    $this->hasMany('Product','user_id');
}

我想在用户页面上列出来自一个用户的所有产品

$q=$this->api->db->dsql();
$q->table('product')->where('product.user_id',$this->api->auth->model['id']);
$tab->add('GRID')->setModel($q);

某种程度上,我弄错了,因为我得到了一个错误,无论我如何尝试过滤我的模型。

1 个答案:

答案 0 :(得分:0)

如果您没有使用Github的最新ATK4版本,那么您应该抓住它并保持最新状态。


你应该这样做:

1)在Model_Product中创建hasOne引用而不是refModel(不推荐使用)。

// adding 'user_id' parameter is not needed, it'll be calculated anyway
// but many developers add it anyway to clear thing up a bit.
$this->hasOne('User','user_id')->defaultValue($this->api->auth->get('id'));

2)Model_User正常。 关于它的一些附注:

  • 我认为你不应该生日=今天()默认。 令人难以置信的是,这个世界上第一天的孩子将使用电脑:)
  • is_admin应为必填+ defaultValue(false) - 默认情况下,用户不是admin。

3)如何列出当前用户的所有产品。

// model of current user
$model = $this->add('Model_User')
              ->load($this->api->auth->get('id'));
// add grid
$page->add('Grid')
     // reference Product model with condition already set
     ->setModel($model->ref('Product'));

就是这样。


也许更好更安全的方法是为登录用户定义新的模型类:

class Model_Myself extends Model_User {
    function init(){
        parent::init();
        $this->addCondition('id', $this->api->auth->get('id'));
        $this->loadAny(); // I'm not sure do we have to explicitly load it here
    }
}

然后像这样创建网格

// model of products of current user
$prod_model = $this->add('Model_Myself')->ref('Product');
// add grid
$page->add('Grid')->setModel($prod_model);