mysql codeigniter активная запись m: m удаление - PullRequest
0 голосов
/ 23 мая 2010

У меня есть таблица таблиц 2 с отношением am: m, что я могу пожелать, чтобы при удалении строки из одной из таблиц я хотел, чтобы строка в присоединяемой таблице также удалялась, мой sql следовать,

Таблица 1

    CREATE TABLE IF NOT EXISTS `job_feed` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `body` text NOT NULL,
  `date_posted` int(10) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;

Таблица 2

    CREATE TABLE IF NOT EXISTS `job_feed_has_employer_details` (
  `job_feed_id` int(11) NOT NULL,
  `employer_details_id` int(11) NOT NULL,
  PRIMARY KEY (`job_feed_id`,`employer_details_id`),
  KEY `fk_job_feed_has_employer_details_job_feed1` (`job_feed_id`),
  KEY `fk_job_feed_has_employer_details_employer_details1` (`employer_details_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Итак, что я хочу сделать, так это, если строка удалена из table1 и имеет идентификатор 1, я хочу, чтобы строка в таблице также имела эту идею как часть отношения.

Я хочу сделать это в соответствии с классом активной записи codeigniters, который у меня сейчас есть,

public function deleteJobFeed($feed_id)
    {
        $this->db->where('id', $feed_id)
                 ->delete('job_feed');

        return $feed_id;
    }

1 Ответ

0 голосов
/ 24 мая 2010

Попробуйте что-то вроде этого (возможно, я неправильно понял некоторые имена):

public function deleteJobFeed($feed_id)
{
    //Delete Job Feed
    $this->db->where('id', $feed_id)
        ->delete('job_feed');

    //Get Related Employer information ID from related table
    $query = $this>db->where('job_feed_id', $feed_id)
    ->get('job_feed_has_employer_details');
        if ($query->num_rows() > 0)
        {
            $row = $query->row(); 
            $employer_details_id = $row->employer_details_id;
        }
    //Now you have the employer details id.
    //You can now delete the row you just got, and then use the id to find the row in the employer details table and delete that.
    $this>db->where('job_feed_id', $feed_id)
    ->delete('job_feed_has_employer_details');

    //I'm assuming your third table is called "employer details". You said you had a many to many relationship.
    $this>db->where('employer_details_id', $employer_details_id)
    ->delete('employer_details');

    return $feed_id;
}

Кроме того, если вы еще не изучили это, я рекомендую http://www.overzealous.com/dmz/

Это облегчает обработку отношений. Надеюсь, это поможет.

...