我第一次使用Laravel 4为客户构建Web应用程序。我有两个表,User
和Zone
,它们之间有关系。
特别是,这是(简化的)User
Schema::create('users', function($table) {
$table->increments('id');
$table->string('name');
$table->enum('role', array('type1', 'type2', 'type3')->default('type1');
$table->integer('zone_id')->nullable();
});
这是Zone
Schema::create('zones', function($table) {
$table->increments('id');
$table->string('name');
});
用户可以有零个或一个区域,这就是zone_id
可以为空的原因。但是,只有当role
列的值为type2
或type3
时才会有一个区域,如果role
为type1
则不会。{/ p>
这些是我的模特
// models/User.php
class User extends Eloquent {
public function zone() {
return $this->belongsTo('Zone');
}
}
// models/Zone.php
class Zone extends Eloquent {
public function users() {
return $this->hasMany('User');
}
}
我不知道如何在模型中添加role
条件。
的确,我正在编写一个失败的测试:
class UserTest extends TestCase {
public function testUserInZoneMustHaveASpecificRole() {
$zone = FactoryMuff::create('Zone');
$user = FactoryMuff::create('User');
// $user, by default has role == 'type1'
// This should pass, because I shouldn't be able to
// associate a role=='type1' user to a zone
$this->assertFalse($zone->users()->save($user)->save());
}
}
你可以给我一些帮助吗?由于我的客户要求,我在应用程序的许多部分都遇到了这个问题。
谢谢。
答案 0 :(得分:0)
我建议您查看“laravelbook / ardent”
https://github.com/laravelbook/ardent
基本Eloquent Model类的扩展正是您想要的 - 它在允许保存之前自动验证。
您只需拨打validate()
,而不是手动拨打save()
:
if ( $model->save() ) {
echo "yay, it was all ok"
} else {
echo "boo, we failed to save";
}
您创建验证规则的方式与通常使用Laravel的方式相同,但Ardent对于为您处理它们更加智能。