我在爲我的代碼編寫正確的DQL時遇到問題(例外:PathExpression無效,必須是StateFieldPathExpression)。 我將從素描我的項目結構開始。Doctrine 2帶嵌套參數的DQL會拋出無效的PathExpression異常
每個實體從IdentifiableObject,提供每一個實體的ID
/**
* @MappedSuperclass
*/
class IdentifiableObject {
/**
* @Id
* @Column(type="integer")
* @GeneratedValue(strategy="IDENTITY")
*/
protected $id;
/**
* getters and setters go here
*/
}
然後我們有一個具有「UserProperties」
/**
* @Entity
* @Table(name="users")
*/
class User extends IdentifiableObject {
/**
* Other unimportant vars go here
*/
/**
* @Column(type="string")
*/
private $userName;
/**
* @OneToMany(targetEntity="UserProperty", mappedBy="user", cascade={"persist", "remove"}, orphanRemoval=true)
*/
private $userProperties = null;
public function __construct() {
$this->userProperties = new ArrayCollection();
}
/**
* Getters and setters go here
*/
}
的Userproperty有一個屬性的列表(用戶對象繼承這基本上是說什麼樣的用戶屬性的類型)和值
/**
* @Entity
* @Table(name="userProperties")
*/
class UserProperty extends IdentifiableObject {
/**
* @OneToOne(targetEntity="Property")
* @JoinColumn(name="propertyID", referencedColumnName="id")
*/
private $property;
/**
* @ManyToOne(targetEntity="User")
* @JoinColumn(name="userID", referencedColumnName="id")
*/
private $userValue
}
最後的物業
/**
* @Entity
* @Table(name="properties")
*/
class Property extends IdentifiableObject {
/**
* @Column(type="string")
*/
private $name;
/**
* @Column(type="string")
*/
private $description;
/**
* @Column(type="integer")
*/
private $mandatory = 0;
/**
* @OneToOne(targetEntity="PropertyType")
* @JoinColumn(name="type", referencedColumnName="id")
*/
private $type;
}
我想要做的就是有對應於某個屬性一個Userproperty所有用戶。 我的嘗試是:
$queryUserId = "SELECT userprop.user FROM UserProperty userprop JOIN userprop.property prop WHERE prop.id = '$propertyId'";
或
$queryUserId = "SELECT user FROM User user JOIN user.userProperties userprop WHERE userprop in(SELECT up FROM UserProperty up WHERE up.property = '$property')";
截至今天我不能得到的東西明智了其他那麼系統...「無效PathExpression必須是StateFieldPathExpression。」
任何人都可以幫忙嗎?
編輯:我會澄清我想在這裏做什麼。
我要的就是這個SQL查詢的DQL版本(工作):
SELECT *
FROM users
WHERE id
IN (
SELECT u.userId
FROM userproperties u, properties p
WHERE u.propertyID = p.id
AND p.id =1
)
凡p.id = XXX是屬性對象(或至少是ID),我想在我的搜索中使用。