使用Propel ORM,如何删除对象的所有相关记录?

clo*_*e45 4 orm propel

我有一个非常简单的Propel问题.我在数据库中存储了潜在客户.这些线索有一个或多个社区兴趣.我正在使用的表名为'lead','community'和'lead_communities'连接表.删除所有潜在客户社区利益的最佳方法是什么?

这里有一些更多的细节.Propel架构如下所示:

    <table name="community">
      <column name="id" type="INTEGER" required="true" primaryKey="true" autoIncrement="true" />
      <column name="name" type="VARCHAR" size="255" />
      <column name="address" type="VARCHAR" size="255" />
      etc...


    <table name="lead_communities">
      <column name="id" type="INTEGER" required="true" primaryKey="true" autoIncrement="true"/>
      <column name="lead_id" type="INTEGER" />
      <column name="community_id" type="INTEGER" />
      <column name="created_date" type="DATE" size="4" />
      <foreign-key foreignTable="community" refPhpName="Lead_Communities">
        <reference local="community_id" foreign="id"/>
      </foreign-key>
      <foreign-key foreignTable="lead" refPhpName="Lead_Communities">
        <reference local="lead_id" foreign="id"/>
      </foreign-key>      
    </table>  

    <table name="lead">
      <column name="id" type="INTEGER" required="true" primaryKey="true" autoIncrement="true"/>
      <column name="salutation" type="VARCHAR" size="20" />
      <column name="first_name" type="VARCHAR" size="255" defaultValue="" />
      <column name="last_name" type="VARCHAR" size="255" defaultValue="" />
      <column name="email" type="VARCHAR" size="255" defaultValue="" />
      etc..
Run Code Online (Sandbox Code Playgroud)

以下是我从数据库中选择潜在客户的方法:

$lead = LeadQuery::create()->filterByEmail($enauk)->findOne();
Run Code Online (Sandbox Code Playgroud)

所以,我希望做的是:

$lead->deleteLeadCommunities();
Run Code Online (Sandbox Code Playgroud)

jak*_*lla 6

好吧,在没有任何其他上下文的情况下,我能想到的最简单的方法就是使用delete()调用对连接表进行查询:

$numDeleted = LeadCommunitiesQuery::create()
                ->filterByLead($lead)
                ->delete();
Run Code Online (Sandbox Code Playgroud)

为了清楚deleteLeadCommunities起见,没有像你想要的生成方法(),但你总是可以为了方便而编写它,并$lead在我的示例代码中替换$this.里面Lead.php:

public function deleteLeadCommunities() {
  return LeadCommunitiesQuery::create()
           ->filterByLead($this)
           ->delete();
}
Run Code Online (Sandbox Code Playgroud)