在eloquent模型上使用select会导致“Undefined offset:0”

问题描述 投票:0回答:2

我是laravel的新手。我写了如下代码。当我添加select时,它会导致错误说undefined offset: 0

即使我注释掉select部分,当我有两个以上的记录时,它也会导致同样的错误。

当我使用toSql()检查查询时,它非常好。

所以当我在dd()之前在$ clientDrivers上使用return时,输出低于。 (看起来也很好)

我的代码会出现什么问题?

任何建议或意见将不胜感激。

编辑:我发现问题是驱动程序模型中的$appends。为什么$appends导致问题?

解决方案:我修复了用于getBankAttribute的驱动程序模型$appends,它运行正常。

这是我的代码:

模型

public function drivers() {
    return $this->belongsToMany('App\Model\User\Driver', 'ClientDriver', 'client_id', 'userdriver_id');
}

调节器

$client = ClientModel::findOrFail($id);

$select = ['UserDriver.name as userdriver_name', 'UserDriver.phone_number as userdriver_phone_number'];

$clientDrivers = $client->drivers()
                        ->select($select) // this does not work. If this is commented out it works perfectly fine.
                        ->get();

return response($clientDrivers, 200);

dd的结果($ clientDrivers)

Collection {#805
  #items: array:2 [
    0 => Driver {#798
      #dates: array:1 [
        0 => "deleted_time"
      ]
      #table: "UserDriver"
      +timestamps: false
      +appends: array:1 [
        0 => "bank"
      ]
      #connection: "mysql"
      #primaryKey: "id"
      #keyType: "int"
      +incrementing: true
      #with: []
      #withCount: []
      #perPage: 15
      +exists: true
      +wasRecentlyCreated: false
      #attributes: array:2 [
        "userdriver_name" => "driver1"
        "userdriver_phone_number" => "140412351235"
      ]
      #original: array:4 [
        "userdriver_name" => "driver1"
        "userdriver_phone_number" => "140412351235"
        "pivot_client_id" => 1
        "pivot_userdriver_id" => 1
      ]
      #changes: []
      #casts: []
      #dateFormat: null
      #dispatchesEvents: []
      #observables: []
      #relations: array:1 [
        "pivot" => Pivot {#801
          +pivotParent: Client {#713
            #table: "Client"
            #guarded: array:2 [
              0 => "id"
              1 => "created_time"
            ]
            #connection: "mysql"
            #primaryKey: "id"
            #keyType: "int"
            +incrementing: true
            #with: []
            #withCount: []
            #perPage: 15
            +exists: true
            +wasRecentlyCreated: false
            #attributes: array:20 [
              "id" => 1
              "created_time" => "2017-12-28 05:23:50"
              "invoice_email" => ""
              "biz_number" => "1234512345"
            ]
            #original: array:20 [
              "id" => 1
              "created_time" => "2017-12-28 05:23:50"
              "invoice_email" => ""
              "biz_number" => "1234512345"
            ]
            #changes: []
            #casts: []
            #dates: []
            #dateFormat: null
            #appends: []
            #dispatchesEvents: []
            #observables: []
            #relations: []
            #touches: []
            +timestamps: true
            #hidden: []
            #visible: []
            #fillable: []
            #forceDeleting: false
          }
          #foreignKey: "client_id"
          #relatedKey: "userdriver_id"
          #guarded: []
          #connection: "mysql"
          #table: "ClientDriver"
          #primaryKey: "id"
          #keyType: "int"
          +incrementing: true
          #with: []
          #withCount: []
          #perPage: 15
          +exists: true
          +wasRecentlyCreated: false
          #attributes: array:2 [
            "client_id" => 1
            "userdriver_id" => 1
          ]
          #original: array:2 [
            "client_id" => 1
            "userdriver_id" => 1
          ]
          #changes: []
          #casts: []
          #dates: []
          #dateFormat: null
          #appends: []
          #dispatchesEvents: []
          #observables: []
          #relations: []
          #touches: []
          +timestamps: false
          #hidden: []
          #visible: []
          #fillable: []
        }
      ]
      #touches: []
      #hidden: []
      #visible: []
      #fillable: []
      #guarded: array:1 [
        0 => "*"
      ]
      #rememberTokenName: "remember_token"
    }
    1 => Driver {#799
      #dates: array:1 [
        0 => "deleted_time"
      ]
      #table: "UserDriver"
      +timestamps: false
      +appends: array:1 [
        0 => "bank"
      ]
      #connection: "mysql"
      #primaryKey: "id"
      #keyType: "int"
      +incrementing: true
      #with: []
      #withCount: []
      #perPage: 15
      +exists: true
      +wasRecentlyCreated: false
      #attributes: array:2 [
        "userdriver_name" => "driver2"
        "userdriver_phone_number" => "140412351236"
      ]
      #original: array:4 [
        "userdriver_name" => "driver2"
        "userdriver_phone_number" => "140412351236"
        "pivot_client_id" => 1
        "pivot_userdriver_id" => 2
      ]
      #changes: []
      #casts: []
      #dateFormat: null
      #dispatchesEvents: []
      #observables: []
      #relations: array:1 [
        "pivot" => Pivot {#803
          +pivotParent: Client {#713}
          #foreignKey: "client_id"
          #relatedKey: "userdriver_id"
          #guarded: []
          #connection: "mysql"
          #table: "ClientDriver"
          #primaryKey: "id"
          #keyType: "int"
          +incrementing: true
          #with: []
          #withCount: []
          #perPage: 15
          +exists: true
          +wasRecentlyCreated: false
          #attributes: array:2 [
            "client_id" => 1
            "userdriver_id" => 2
          ]
          #original: array:2 [
            "client_id" => 1
            "userdriver_id" => 2
          ]
          #changes: []
          #casts: []
          #dates: []
          #dateFormat: null
          #appends: []
          #dispatchesEvents: []
          #observables: []
          #relations: []
          #touches: []
          +timestamps: false
          #hidden: []
          #visible: []
          #fillable: []
        }
      ]
      #touches: []
      #hidden: []
      #visible: []
      #fillable: []
      #guarded: array:1 [
        0 => "*"
      ]
      #rememberTokenName: "remember_token"
    }
  ]
}
php laravel laravel-5 php-7
2个回答
1
投票

你需要在$select中传递字符串。您当前正在传递数组。更改您的$select如下:

$select = "'UserDriver.name as userdriver_name', 'UserDriver.phone_number as userdriver_phone_number'";

0
投票

您可以使用with()获取客户端的关联驱动程序

$client = ClientModel::where('id',$id)
            ->with('drivers:name,phone_number')
            ->get();
$clientDrivers = $client->drivers;

return response($clientDrivers, 200);
© www.soinside.com 2019 - 2024. All rights reserved.