运行原始SQL但返回模型实例数组

时间:2017-02-17 12:29:06

标签: laravel eloquent

我想运行一个sql语句,并且返回值是一个模型数组,目前已经返回了一个stdClass数组。

我正在做这样的事情

DB::select('some sql statement')

返回结果类似于

array(2) {
  [0]=> object(stdClass)#524 (7) .....
  [1]=> object(stdClass)#525 (7) .....

我宁愿

array(2) {
  [0]=> object(App\Feed)#524 (7) .....
  [1]=> object(App\Feed)#525 (7) .....

查询只涉及一个表(没有连接等)。如果我使用DB::raw()等查询构建器,代码看起来会更麻烦。我理解SQL注入的风险。

有没有合适的方法呢?

型号代码(Feed.php)

use Illuminate\Database\Eloquent\Model;

class Feed extends Model
{
    .......

2 个答案:

答案 0 :(得分:1)

在这种情况下,您应该使用模型 - https://laravel.com/docs/5.4/eloquent

答案 1 :(得分:0)

保持简单:) http://commandz.io/create-models-from-query-builder/

    $result = Feeds::query()
                ->where(
                    ['wait_seconds', '>', 'TIMESTAMPDIFF(SECOND, emailed_at, NOW() )'],
                    ['GREATEST(wait_seconds / 6, '.self::MIN_RESCAN_SECONDS.')', '>', 'TIMESTAMPDIFF(SECOND, scanned_at, NOW() )']
                )
               ->orWhereNull('scanned_at')
               ->get();;
    $feeds = \App\Feed::hydrate($result);