テーブルのエントリと2番目のテーブルの添付エントリを削除する削除メソッドを作成したいと思います。
これはこれまでのところ私のソースです:
// Delete entry in users_handles
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$conditions = array(
$db->quoteName('userid') . ' = ' . $db->quote((int)$userid),
$db->quoteName('type') . ' = ' . $db->quote($type),
);
$query->delete($db->quoteName('#__bestia_users_handles'));
$query->where($conditions);
$db->setQuery($query);
$result = $db->execute();
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$conditions = array($db->quoteName('handleid') . ' = ' . GET ID FROM ENTRY THAT HAS BEEN DELETED BEFORE));
$query->delete($db->quoteName('#__bestia_users_handles_mapping'));
$query->where($conditions);
$db->setQuery($query);
$result = $db->execute();
これは可能ですか?
これは、クエリがどのように機能するかの例です
_function delete($userid)
{
// Delete entry in users_handles
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$conditions = array(
$db->quoteName('userid') . ' = ' . $db->quote((int)$userid),
$db->quoteName('type') . ' = ' . $db->quote($type),
);
$query->delete($db->quoteName('#__bestia_users_handles'));
$query->where($conditions);
$db->setQuery($query);
$db->execute();
$query->clear();
$query = $db->getQuery(true);
$conditions = array($db->quoteName('handleid') . ' = ' . $userid));
$query->delete($db->quoteName('#__bestia_users_handles_mapping'));
$query->where($conditions);
$db->setQuery($query);
$db->execute();
}
_
クエリからデータをクリアする$query->clear();
を使用したことがわかります。
次に、両方のクエリで_$userid
_を使用しました。
MySQLとInnoDBを使用していると思います。 MySQL FOREIGN KEY制約 を使用して、 foreign key definition のON DELETEにCASCADEを追加する方が、より速く、簡単で、リソース/速度が効率的です。つまり、削除された親テーブル行を参照しているすべての子テーブル行を削除します。また、モデルファイルを変更する必要もありません。 (モデルが通常行うように)親テーブルの行のみを削除し、残りはデータベースシステムが行います。ここでデータベースを構築するために MySQL Workbench を使用する場合、この作業を行う場所を見つけることができます。