Как удалить первый ряд - PullRequest
2 голосов
/ 27 мая 2019

У меня проблемы с Laravel SQL Builder. Я хочу удалить первый ряд. Я использую следующий код:

DB::table('ahah')->first()->delete().

В контроллере я уже импортировал класс DB, используя оператор use Illuminate\Support\Facades\DB. Подскажите, в чем проблема и как ее исправить?

Ответы [ 5 ]

4 голосов
/ 27 мая 2019

Это не работает, потому что DB::table('ahah')->first() возвращает объект stdClass.И, конечно же, stdClass не имеет delete() метода.

Поэтому вам нужно получить первый элемент таблицы с операторами SQL:

// Supposing your primary key column is called 'id'

DB::table('ahah')
    ->orderBy('id')
    ->limit(1)
    ->delete();
1 голос
/ 27 мая 2019

Если вы работаете в Laravel, то лучше использовать Eloquent ORM , создав модель.

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{

    // Code Stuff
}

получить первые записи и удалить

$user = \App\Models\User::orderBy('id')->first()->delete();
0 голосов
/ 30 мая 2019

Используйте самый старый метод для получения первой записи:

$ahah_first = \DB::table('ahah')->oldest()->first();
\DB::table('ahah')->where('id', $ahah_first->id)->delete();
0 голосов
/ 27 мая 2019

Как ответили другие, ваше требование должно быть выполнено так, как вы описали в своем вопросе.

Я просто добавляю более чистую технику для удаления ПЕРВОЙ строки таблицы.Создайте модель (сделанную с использованием Eloquent), затем добавьте метод области действия, который вернет первую строку таблицы, а затем вам просто нужно вызвать delete() в построителе запросов.

<?php
namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class FooBarModel extends Model
{
    protected $table = 'foo_bar';

    /**
     * Scope a query to retrieve first row.
     *
     * @param  \Illuminate\Database\Eloquent\Builder $query
     * @return \Illuminate\Database\Eloquent\Builder
     */
    public function scopeFirstRow($query)
    {
        return $query->orderBy('id')->first();  // Assuming id is the name of primary key column in the table
    }
}

Тогда вы можетеудалите первую строку как:

FooBarModel::firstRow()->delete();  // This will delete the very first available row every time it is called

Однако обработка исключений всегда является хорошей практикой.Здесь, если в таблице нет ни одной строки, вызов вышеуказанного оператора вызовет исключение, так как объект построителя запросов вернет null.Поэтому лучше сначала проверить, не является ли результат нулевым, а затем вызывать только метод delete().

$firstRow = FooBarModel::firstRow();
if (!is_null($firstRow)) {
    $firstRow->delete();
}

Аналогично, вы также можете создавать другие области действия для удаления последней строки, последней до последней строки и т. Д.

Если вы хотите пойти по более чистому пути, чем этот, то вы можете просто написать метод в самом Model и написать весь код для удаления там.

/**
 * @return bool
 */
public static function deleteFirstRow()
{
    $firstRow = self::firstRow();
    if (!is_null($firstRow)) {
        $firstRow->delete();
        return true;
    }
    return false;
}

Затем вызовитеdeleteFirstRow() чтобы удалить первую строку.

FooBarModel::deleteFirstRow();

Надеюсь, это поможет.

0 голосов
/ 27 мая 2019

ModelName: измените с вашей моделью

$item = ModelName::orderBy('id', 'ASC')->first();
$item->delete();
...