【问题标题】:How do I delete a row without having the id in url?如何在 url 中没有 id 的情况下删除一行?
【发布时间】:2013-06-15 15:15:00
【问题描述】:

我有一个用于添加来自公司的 aanbiedingen(优惠)的表格。我为此使用了三个表:

Aanbiedingen
- - - - - - -
idaanbiedingen //id
Aanbieding //offername
Omschrijving //description
Prijs //price
Conditie //condition

Bedrijfaanbiedingen
- - - - - - - - - - 
idbedrijfaanbiedingen //id
idaanbiedingen // offers id
idbedrijven // company id
idfotoaanbiedingen // photo id

fotoaanbiedingen
- - - - - - - - -
idfotoaanbiedingen //id
fotonaam // photo name (this is the file_name)

我可以从表中删除数据:Aanbiedingen 和 Bedrijfaanbiedingen。我使用 url 中的 id 来删除它们。我在两个表中都使用了 idaanbiedingen 来删除数据。

问题

如何删除fotoaanbiedingen 中的数据,而该表中没有 idaanbiedingen? 我不明白如何做到这一点。这看起来几乎是不可能的。我曾考虑与bedrijfaanbiedingen 的 idfotoaanbiedingen 合作,但我不知道该怎么做。

我的模型如下所示:

function deleteaanbieding($id)
{
    $this->db->where('idaanbiedingen', $id);
    $this->db->delete('bedrijfaanbiedingen');
    $this->db->where('idaanbiedingen', $id);
    $this->db->delete('Aanbiedingen');
    redirect('members/aanbiedingen');
}

$id 字段为:$id = $this->uri->segment(3);

如何添加删除fotoaanbiedingen的功能?

【问题讨论】:

  • 通常,您可以执行删除连接 sql 查询,但我认为 Codeigniters 活动记录不支持此操作。您可能不得不恢复使用$this->db->query();
  • 如果您没有进行软删除(在数据库中设置删除标志),您还可以在 mysql 中的表之间创建级联删除关系,并依靠它为您删除记录。假设这是一对多的关系。
  • 能否提供一个使用 SQL 的示例?

标签: php mysql forms codeigniter delete-row


【解决方案1】:

首先我认为它会让你的生活更轻松 Bedrijfaanbiedingen 和 fotoaanbiedingen 在另一边链接(fotoaanbiedingen 会有一个外键:idbedrijfaanbiedingen)

对于您的问题,您应该考虑使用 where_in() activerecord 函数(请参阅文档,activerecord 部分)。你必须有一个 idfotoaanbiedingen 数组。

例如,如果您有一个 idbedrijfaanbiedingen,您应该尝试类似的方法(以下代码位于您方法的开头):

$this->db->select('idfotoaanbiedingen');
$this->db->from('Bedrijfaanbiedingen');
$this->db->where('idbedrijfaanbiedingen',$yourId);
$query = $this->db->get(); //getting the photo id out of the Bedrijfaanbiedingen table

//not sure about the result array, you should treat it better before entering it in argument of this method
$this->db->where_in('idfotoaanbiedingen',$query->result_array());  
$this->db->delete('fotoaanbiedingen');

【讨论】:

    【解决方案2】:

    在标准的 mysql 查询中,它看起来像这样。

    delete Aanbiedingen,Bedrijfaanbiedingen,fotoaanbiedingen 
    from Bedrijfaanbiedingen
    inner join Aanbiedingen ON Aanbiedingen.idaanbiedingen = Bedrijfaanbiedingen.idaanbiedingen
    inner join fotoaanbiedingen ON fotoaanbiedingen.idfotoaanbiedingen = Bedrijfaanbiedingen.idfotoaanbiedingen 
    where Bedrijfaanbiedingen.idaanbiedingen= {the id}
    

    请尝试代码,注意此代码未经测试。您可以根据需要将其转换为活动记录,基本上表Bedrijfaanbiedingen与表fotoaanbiedingen(即idfotoaanbiedingen)有一些共同点,您只需加入它们即可。

    【讨论】:

    • 这就像一个魅力。谢谢!。我用 $id 更改了 {id} 并且它起作用了。 :D
    【解决方案3】:

    如果您没有 ID 字段,那么您可以在可能的情况下使用其他字段进行删除。

    检查它是否适合你:

    $this->db->join('fotoaanbiedingen', 'fotoaanbiedingen.idfotoaanbiedingen = Bedrijfaanbiedingen.idfotoaanbiedingen');
    

    【讨论】:

    • 不,我不能。如果您查看前两个表。他们有 idaanbiedingen。但第三张桌子没有。那我怎么能删除呢?我猜想使用来自bedrijfaanbiedingen 的连接?
    • 那么我该如何使用它来删除数据呢?
    • 我已经用那个加入试过了。但是加入这些 id 后的删除功能是什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-15
    • 2017-03-09
    • 1970-01-01
    • 2020-05-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多