Tôi đang sử dụng CakePHP 3.3.6 và MySQL 5.7.13."Không thể chuyển đổi giá trị thành chuỗi" khi truy xuất dữ liệu (mối quan hệ thuộc vềToMany)
Tôi có ba bảng trong cơ sở dữ liệu của tôi (giữa những người khác): bộ sưu tập, thẻ và tham gia bảng collections_tags.
bộ sưu tập Bảng
CREATE TABLE IF NOT EXISTS `database`.`collections` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`name` VARCHAR(45) NOT NULL,
`event_date` DATE NOT NULL,
`url_slug` VARCHAR(45) NOT NULL,
`status` TINYINT(1) NOT NULL DEFAULT 0,
`user_id` INT UNSIGNED NOT NULL,
`created` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
`modified` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`, `user_id`),
INDEX `fk_collections_users1_idx` (`user_id` ASC),
CONSTRAINT `fk_collections_users1`
FOREIGN KEY (`user_id`)
REFERENCES `database`.`users` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
ENGINE = InnoDB
thẻ Bảng
CREATE TABLE IF NOT EXISTS `database`.`tags` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`name` VARCHAR(45) NOT NULL,
`created` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
`modified` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`))
ENGINE = InnoDB
collections_tags Bảng
CREATE TABLE IF NOT EXISTS `database`.`collections_tags` (
`id` INT NOT NULL AUTO_INCREMENT,
`collection_id` INT UNSIGNED NOT NULL,
`tag_id` INT UNSIGNED NOT NULL,
PRIMARY KEY (`id`, `collection_id`, `tag_id`),
INDEX `fk_collections_has_tags_tags1_idx` (`tag_id` ASC),
INDEX `fk_collections_has_tags_collections1_idx` (`collection_id` ASC),
CONSTRAINT `fk_collections_has_tags_collections1`
FOREIGN KEY (`collection_id`)
REFERENCES `database`.`collections` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_collections_has_tags_tags1`
FOREIGN KEY (`tag_id`)
REFERENCES `database`.`tags` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB
trong tôi Bảng \ CollectionsTable.php:
public function initialize(array $config)
{
# A collection hasMany Sets
$this->hasMany('Sets', [
'dependent' => True,
]);
# A Collection belongsTo a User
$this->belongsTo('Users');
# A Collection belongsToMany Tags
$this->belongsToMany('Tags');
}
trong bảng của tôi \ TagsTable.php:
public function initialize(array $config)
{
# A Tag belongsToMany Collections
$this->belongsToMany('Collections');
}
tôi có thể nhận được tất cả các bộ sưu tập hoặc tất cả các Tags. Nó hoạt động. Nhưng nếu tôi cố gắng để có được tất cả các bộ sưu tập với các thẻ có liên quan của họ, tôi có lỗi này:
Lỗi này xảy ra khi tôi có điều này trong bộ sưu tập điều khiển của tôi:
class CollectionsController extends AppController
{
public function index()
{
$this->set('collections', $this->Collections->find('all', ['contain' => ['Tags']]));
}
}
và điều này trong tôi Template \ Bộ sưu tập \ index.ctp:
<h1>Hi, this is the Collection > Index page.</h1>
<?php foreach ($collections as $collection): ?>
<p>test</p>
<?php endforeach; ?>
tôi không có ý tưởng tại sao ... Tôi đã cố gắng tạo ra một tập tin Table \ CollectionsTagsTable.php, nhưng nó đã không tạo sự khác biệt.
Nhờ sự giúp đỡ của bạn
EDIT: Tôi cố gắng thay đổi DATETIME lĩnh vực bởi dấu thời gian và TINYINT bởi INT, nó đã không thay đổi bất cứ điều gì.
Bất cứ khi nào gặp lỗi, hãy luôn gửi thông báo lỗi _complete_, nghĩa là bao gồm cả stacktrace _full_ (lý tưởng sao chép từ các bản ghi mà nó có sẵn trong một thời trang đúng cách có thể đọc được), ngay cả khi vấn đề có thể là hiển nhiên đối với những người quen thuộc với CakePHP! – ndm
Và cung cấp SQL đã tạo ra lỗi. –
Nó hầu như luôn luôn "sai" để có 'PRIMARY KEY (id, ...)' khi id là 'AUTO_INCREMENT'. –