Ваш код в основном корректен для использования с DataMapper ORM и CodeIgniter.
Чтобы объяснить немного, DataMapper - это просто уровень абстракции. Он обрабатывает много всего необходимого при работе с базами данных и сопоставлении ваших объектов с вашими таблицами. При этом вам не нужно загружать свои модели и т. Д. Пока вы автоматически загружаете свою библиотеку базы данных и библиотеку datamapper, вы можете использовать DataMapper.
Массив проверки позволяет DataMapper знать требования к вашим свойствам. Итак, если вы попытаетесь сохранить объект, и одно из созданных / измененных вами свойств не соответствует этим требованиям, сохранение не будет выполнено, и вы получите сообщение об ошибке:
// For example
if ($myObj->save())
{
// $myObj validation passed and is saved to db
}
else
{
// $myObj validation failed, save did not complete
echo $myObj->error->string;
}
У Codeigniter уже есть библиотека с именем Cart
, поэтому вы не захотите называть свою модель Cart
. Таким образом, вы можете переименовать эту модель в Basket
или что-то еще, что имеет смысл.
Я знаю, что вы все еще пытаетесь заставить вещи работать, но я чувствую, что вам нужно немного подумать о вашей структуре данных. Вы бы не сохранили username
в объекте Cart
, поэтому мы используем отношения. Итак, я бы структурировал это примерно так:
// baskets table (a table represents many baskets, therefore it is plural)
id
user_id
blah
blah
created
updated
// users table
id
username
email_address
created
updated
// basket model (a model represents 1 basket, therefore it is singular)
class Basket extends DataMapper
{
public function __construct()
{
parent::__construct();
}
var $has_one = array('user'); // each basket belongs to one user
var $validation = array(...);
}
// user model
class User extends DataMapper
{
public function __construct()
{
parent::__construct();
}
var $has_many = array('basket'); // each user can have many baskets
var $validation = array(...);
}
// controller
public function __construct()
{
parent::__construct();
}
public function index()
{
$basket = new Basket();
$basket->blah = 'whatever';
$basket->save();
// at this point, $basket is saved to the database
// now let's add it to the user
$user = new User();
$user->where('id', 1)->get(1);
// now we have a user
// save the relationship to the basket
$user->save($basket);
// now $basket->user_id == 1
// get the username from the basket
$u = $basket->user->get();
$username = $u->username;
// yes, there are faster and shorter ways to write most of this,
// but I think for beginners, this syntax is easier to understand
}