如何删除第一行

时间:2019-05-27 08:00:23

标签: laravel laravel-5 laravel-query-builder

我在使用Laravel SQL Builder时遇到了一些麻烦。我要删除第一行。我正在使用以下代码:

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

在控制器中,我已经使用语句DB导入了use Illuminate\Support\Facades\DB类。您能告诉我什么问题以及如何解决吗?

5 个答案:

答案 0 :(得分:4)

它不起作用,因为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 :(得分:1)

如果在Laravel中工作,那么最好通过创建模型来使用雄辩的ORM 。     

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{

    // Code Stuff
}

获取第一条记录并删除

$user = \App\Models\User::orderBy('id')->first()->delete();

答案 2 :(得分:0)

ModelName:根据您的模型进行更改

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

答案 3 :(得分:0)

正如其他人回答的那样,应该按照您的问题中的描述满足您的要求。

我只是添加了一种更清洁的技术来删除表的第一行。创建模型(使用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。因此最好先检查结果是否不为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();

希望这会有所帮助。

答案 4 :(得分:0)

使用最早的方法获取第一条记录:

$ahah_first = \DB::table('ahah')->oldest()->first();
\DB::table('ahah')->where('id', $ahah_first->id)->delete();