1

joomla でコンポーネントを作成していますが、データベースの使用、特に行の削除に問題があります。以下のコードは私が使用しているものです

    $db = JFactory::getDbo();                       
    $query = $db->getQuery(true);

    // delete if this date already exists for this user
    $conditions = array(
        $db->quoteName('userid') . '='.$array['userid'], 
        $db->quoteName('date') . '='.$date
    );

    $query->delete($db->quoteName('#__timereport_schedule'));
    $query->where($conditions);         
    $db->setQuery($query);
    $result = $db->execute();

ここでやろうとしているのは、指定されたユーザー ID と日付に一致する行を削除することです。これはかなり簡単です。ただし、データベースには影響しません。私は変数を知っており$array['userid']$date同じ関数で挿入を行うために同じ関数が後で使用されているため正しいです(レコードが存在する場合は削除して新しいレコードを作成することになっています)。挿入は正常に機能します。つまり、エントリが重複することになります.

正常に挿入された行の例:

( userid, date, starttime, endtime, id, enddate, ) 値 (456 leave, days'2013-01-01', '08:00:00', '16:00:00', 448, '2013-01-01', '3' , '["火"]')

と:

    $query = $db->getQuery(true);

    $columns = array('userid', 'date', 'starttime', 'endtime', 'id', 'leave');

    $values = array("'".$array['userid']."'", "'".$date."'", "'".$array['starttime']."'", "'".$array['endtime']."'", "'null'", "'".$array['leave']."'");

    $query
        ->insert($db->quoteName('#__timereport_schedule'))
        ->columns($db->quoteName($columns))
        ->values(implode(',', $values));

    $db->setQuery($query);
    try {
        $result = $db->execute();            
    } catch (Exception $e) {
        return $e;
    }  

私は何が欠けていますか?http://docs.joomla.org/Inserting,_Updating_and_Removing_data_using_JDatabase#Deleting_a_Recordの例に従って、このクエリを作成しました。

4

3 に答える 3

1

サンプルの日付とユーザー ID を定義したので、以下のコードは機能するはずです。また、最も重要なのは、データを引用する必要があることです (db フィールドよりもはるかに重要です)。

$array['userid'] = 127;
$date = date("Y-m-d H:i:s");

$db = JFactory::getDbo();
$query = $db->getQuery(true);

// delete if this date already exists for this userv
$conditions = array(
    $db->quoteName('userid') . '='.$db->quote($array['userid']),
    $db->quoteName('date') . '='.$db->quote($date)
);
$query->delete($db->quoteName('#__timereport_schedule'));
$query->where($conditions);
try {
    $db->setQuery($query);
    $result = $db->execute();
}
catch (RuntimeException $e){
    echo $e->getMessage();
}

// for testing you can echo the query as
echo $db->replacePrefix($query);

$array['userid']が定義されていないか空であり、かつが定義されていない場合$date、この例では、クエリは間違いなくエラーをスローします。

于 2013-09-02T11:02:41.037 に答える
0

setQuery の後に以下のコードを使用します

$db->setQuery($query);
$result = $db->query();    
于 2013-09-02T11:25:50.943 に答える
0

最後に、 を追加しecho $query;ます。これにより、実際に実行されている SQL クエリが画面に出力されます。これを投稿して、クエリを確認できるようにします。これは、何が問題なのかを確認するのに役立ちます。

また、多くの場合、Joomla は保存後にリダイレクトして、ページの更新によるデータの再送信を防ぎます。exit();そのため、実際に何がエコーされているかを確認するために、エコーの後にステートメントを追加すると役立つ場合があります。

(これを入力すると、日付を引用する必要があると思います。)

于 2013-09-03T16:19:46.293 に答える