У меня есть следующая особенность:Черта работает странно Laravel ОРМ
<?php
namespace App\Traits;
trait LastElement {
public function scopeLast($query)
{
return $query->orderBy('id', 'desc')
->first();
}
}
Как вы можете видеть, что это сфера простых Laravel в. Он работает как first()
, но возвращает последний элемент.
У меня есть следующая модель:
<?php
namespace App;
use App\Traits\LastElement;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
class Daemon extends Model
{
use LastElement;
use SoftDeletes;
protected $dates = ['created_at', 'updated_at', 'deleted_at'];
protected static function check()
{
$last = self::last();
if (!empty($last)) {
sleep(1);
return empty(self::where('id', $last->id)
->where('updated_at', $last->updated_at)
->first());
}
return true;
}
public static function start()
{
if (self::check()) {
$me = new self;
$me->save();
$i = 0;
while (true) {
$i++;
usleep(1/3 * 1000);
if (($i % 3) == 0) {
$i = 0;
$me->save();
}
}
}
}
}
Пришло независимо от того, что эта модель сделать - но в check()
методе мой $last
вар является экземпляром Illuminate\Database\Eloquent\Builder
. В моей другой модели эта черта работает хорошо - что я не так?
Я хочу создать нечто вроде 'first()', поэтому я использовал черту. Но я не понимаю, почему в других моделях эта черта работает хорошо, но в этой модели нет. – ventaquil