我有一个包含 ID 和名称字段的字符表。
id 名称
1 甘道夫
2 佛罗多
3 咕噜
4 山姆怀斯
我有一个包含 ID、character1_id 和 character2_id 字段的 Matches 表。
id char1 char2
1 1 3
2 2 4
我正在尝试编写一个查询,该查询将加入这些并根据 Matches 表提取名称。
第 1 场是甘道夫和咕噜
第 2 场是佛罗多和山姆怀斯
这是我的 YAML
ORM\Dynasties2\Matches:
type: entity
table: proposals
fields:
id:
type: integer
id: true
generator:
strategy: AUTO
manyToOne:
character1:
targetEntity: ORM\Dynasties2\Characters
character2:
targetEntity: ORM\Dynasties2\Characters
但是我没有运气给它写信或读它。
我已经尝试过这个查询,并以几种不同的方式对其进行了调整,但均未成功。
$query = $this -> doctrine -> em -> createQuery ("SELECT a, b, c
FROM ORM\Dynasties2\Matches a
JOIN a.character1 b
JOIN a.character2 c
");
当我尝试写入实体时,例如
$new_match = new ORM\Dynasties2\Matches;
$new_match->setCharacter1($character1);
$new_match->setCharacter2($character2);
我收到以下错误:
消息:spl_object_hash() 期望参数 1 是对象,给定字符串 消息:get_class() 期望参数 1 是对象,给定字符串
和
消息:传递给 ORM\Dynasties2\Proposals::setCharacter1() 的参数 1 必须是 ORM\Dynasties2\Characters 的实例,给定字符串
当我尝试解析和显示查询数据时,我得到:
消息:类 ORM\Dynasties2\Characters 的对象无法转换为字符串
我已经翻阅了Doctrine 查询文档,但要么我遗漏了某些东西,要么没有理解某些东西。
(使用 CodeIgniter2,但我认为这与此无关)
编辑:
这是我的 Matches 实体
namespace ORM\Dynasties2;
use Doctrine\ORM\Mapping as ORM;
/**
* ORM\Dynasties2\Matches
*/
class Matches
{
/**
* @var integer $id
*/
private $id;
/**
* @var ORM\Dynasties2\Characters
*/
private $character1;
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* Set character1
*
* @param ORM\Dynasties2\Characters $character1
* @return Proposals
*/
public function setCharacter1(\ORM\Dynasties2\Characters $character1 = null)
{
$this->character1 = $character1;
return $this;
}
/**
* Get character1
*
* @return ORM\Dynasties2\Characters
*/
public function getCharacter1()
{
return $this->character1;
}
/**
* @var ORM\Dynasties2\Characters
*/
private $character2;
/**
* Set character2
*
* @param ORM\Dynasties2\Characters $character2
* @return Proposals
*/
public function setCharacter2(\ORM\Dynasties2\Characters $character2 = null)
{
$this->character2 = $character2;
return $this;
}
/**
* Get character2
*
* @return ORM\Dynasties2\Characters
*/
public function getCharacter2()
{
return $this->character2;
}
}
和字符:
namespace ORM\Dynasties2;
use Doctrine\ORM\Mapping as ORM;
/**
* ORM\Dynasties2\Characters
*/
class Characters
{
/**
* @var integer $id
*/
private $id;
/**
* @var string $name
*/
private $name;
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* Set name
*
* @param string $name
* @return Characters
*/
public function setName($name)
{
$this->name = $name;
return $this;
}
/**
* Get name
*
* @return string
*/
public function getName()
{
return $this->name;
}
编辑:更多错误输出
我手动将一些数据插入到 Matches 表中以测试查询。
我收到以下错误:
遇到 PHP 错误
严重性:4096
消息:类 ORM\Dynasties2\Characters 的对象无法转换为字符串
文件名:family/display_view.php
行号:23
这是该视图文件:
foreach ($data as $key => $row) {
$char1 = $row -> getCharacter1();
$char2 = $row -> getCharacter2();
//$target_turn = $row -> getTargetTurn();
echo "</br>You have proposed a match between " . $char1 . " and " . $char2 . ".</br>";
}
第 23 行是“回声”。
当我尝试使用 setter 写入实体/表时,我得到以下信息:
遇到 PHP 错误
严重性:4096
消息:传递给 ORM\Dynasties2\Proposals::setCharacter1() 的参数 1 必须是 ORM\Dynasties2\Characters 的一个实例,给定字符串,在第 76 行的 /path/applicationFolder/models/display_family_model.php 中调用并定义
文件名:Dynasties2/Matches.php
行号:255
这是模型的第 76 行,
$char1 = $_SESSION["data_char1"];
$new_proposal->setCharacter1($char1); // <-- line 76
这是比赛的第 255 行
public function setCharacter1(\ORM\Dynasties2\Characters $character1 = null) // <-- line 255
{
$this->character1 = $character1;
return $this;
}
遇到 PHP 错误
严重性:4096
消息:传递给 ORM\Dynasties2\Proposals::setCharacter2() 的参数 1 必须是 ORM\Dynasties2\Characters 的一个实例,给定字符串,在第 77 行的 /path2/applicationFolder/models/display_family_model.php 中调用并定义
文件名:Dynasties2/Matches.php
行号:282
$char2 = $_SESSION["data_char2"];
$new_proposal->setCharacter2($char2); // <-- line 77
public function setCharacter2(\ORM\Dynasties2\Characters $character2 = null) // <-- line 282
{
$this->character2 = $character2;
return $this;
}
和
遇到 PHP 错误
严重性:警告
消息:spl_object_hash() 期望参数 1 是对象,给定字符串
文件名:ORM/UnitOfWork.php
行号:1318
和
遇到 PHP 错误
严重性:警告
消息:spl_object_hash() 期望参数 1 是对象,给定字符串
文件名:ORM/UnitOfWork.php
行号:734
和
遇到 PHP 错误
严重性:警告
消息:get_class() 期望参数 1 是对象,给定字符串
文件名:ORM/UnitOfWork.php
行号:738
和
致命错误:在 /path/applicationFolder/libraries/Doctrine/ORM/UnitOfWork 中出现消息“在关联 ORM\Dynasties2\Matches#character1 上找到类型实体,但期待 ORM\Dynasties2\Characters”的未捕获异常“Doctrine\ORM\ORMException” .php:737 堆栈跟踪:#0 /path/applicationFolder/libraries/Doctrine/ORM/UnitOfWork.php(639): Doctrine\ORM\UnitOfWork->computeAssociationChanges(Array, '5') #1 /path/applicationFolder/libraries /Doctrine/ORM/UnitOfWork.php(376): Doctrine\ORM\UnitOfWork->computeChangeSet(Object(Doctrine\ORM\Mapping\ClassMetadata), Object(ORM\Dynasties2\Proposals)) #2 /path/applicationFolder/libraries/ Doctrine/ORM/UnitOfWork.php(661): Doctrine\ORM\UnitOfWork->computeScheduleInsertsChangeSets() #3 /path/applicationFolder/libraries/Doctrine/ORM/UnitOfWork.php(270):/path/applicationFolder/libraries/Doctrine/ORM/UnitOfWork.php 中的 Doctrine\ORM\UnitOf 第 737 行