8

論理的にSQLでは、JOINSを使用してテーブルからデータを削除できます。

DELETE  clb_subscriber_group_mapping .* FROM clb_subscriber_group_mapping 
INNER JOIN clb_driver_group ON (clb_driver_group.id = clb_subscriber_group_mapping.driver_group_id)
INNER JOIN clb_company ON (clb_company.id = clb_driver_group.company_id)
WHERE clb_company.id = 256 AND clb_subscriber_group_mapping.subscriber_id = 1784;

上記のクエリに相当する CodeIgniter は何でしょうか?

CodeIgniter は結合による削除クエリをサポートしていますか?

4

4 に答える 4

4

Active Recordsを使用する必要がありますか?

それ以外の場合は、以下のクエリが実行されます。

$int_company_id = 256;
$int_subscriber_id = 1784;

$this->db->query("
DELETE  clb_subscriber_group_mapping .* FROM clb_subscriber_group_mapping 
INNER JOIN clb_driver_group ON (clb_driver_group.id = clb_subscriber_group_mapping.driver_group_id)
INNER JOIN clb_company ON (clb_company.id = clb_driver_group.company_id)
WHERE clb_company.id = ? AND clb_subscriber_group_mapping.subscriber_id = ?;

", array($int_company_id, $int_subscriber_id));
于 2012-05-14T10:14:43.090 に答える
4

CodeIgniter の Active Record クラスではそれができません。削除クエリでの結合はサポートされていません。$this->db->query()Robin Castlin が述べたように、クエリを実行する必要があります。

以下のコードは、コア ファイルから取得したものです。DELETEこれは、クエリを生成する内部コンポーネントの 1 つです。

function _delete($table, $where = array(), $like = array(), $limit = FALSE)
{
    $conditions = '';

    if (count($where) > 0 OR count($like) > 0)
    {
        $conditions = "\nWHERE ";
        $conditions .= implode("\n", $this->ar_where);

        if (count($where) > 0 && count($like) > 0)
        {
            $conditions .= " AND ";
        }
        $conditions .= implode("\n", $like);
    }

    $limit = ( ! $limit) ? '' : ' LIMIT '.$limit;

    return "DELETE FROM ".$table.$conditions.$limit;
}

ご覧のとおり、JOIN句の挿入を指定するものは何もありません。

于 2012-05-14T10:48:24.200 に答える