Laravel ErrorException未定义的偏移量:0

时间:2015-06-15 16:22:23

标签: runtime-error laravel-5

我在laravel 5中遇到了这个错误。

这是我面临错误的控制器功能(在我所做的行($vendor->client[0]->id)中:

public function show($username) {
Log::info('Vendors Controller : show function with '.$username);
$vendor = VendorProfile::where('username', $username)->first();
$output = print_r($vendor,1);
Log::info($output);
if($vendor) {
  Log::info('client '. $vendor->client);
  $client = Client::find($vendor->client[0]->id);
  $title = $client->profile->company_name;

$output打印为:

    [2015-06-15 21:34:43] local.INFO: App\models\VendorProfile Object
(
    [table:protected] => vendor_profile
    [guarded:protected] => Array
        (
            [0] => id
        )

    [morphClass:protected] => MorphVendorProfile
    [connection:protected] =>
    [primaryKey:protected] => id
    [perPage:protected] => 15
    [incrementing] => 1
    [timestamps] => 1
    [attributes:protected] => Array
        (
            [id] => 16
            [first_name] => some name
            [last_name] =>
            [company_name] => some name
            [contact_number] => 1234567890
            [username] => username
            [profile_photo] =>
            [photo_mime_type] =>
            [cover_photo] =>
            [cover_photo_mime_type] =>
            [address] =>
            [city_id] => 1
            [zip_code] =>
            [story] =>
            [establishment_date] =>
            [pricing] =>
            [education] =>
            [services_offered] =>
            [assignments_undertook] =>
            [advanced_fees] =>
            [equipments] =>
            [about_service] =>
            [coins] => 500
            [created_at] => 2015-06-15 20:21:45
            [updated_at] => 2015-06-15 20:21:45
        )

    [original:protected] => Array
        (
            [id] => 16
            [first_name] => some name
            [last_name] =>
            [company_name] => some name
            [contact_number] => 1234567890
            [username] => username
            [profile_photo] =>
            [photo_mime_type] =>
            [cover_photo] =>
            [cover_photo_mime_type] =>
            [address] =>
            [city_id] => 1
            [zip_code] =>
            [story] =>
            [establishment_date] =>
            [pricing] =>
            [education] =>
            [services_offered] =>
            [assignments_undertook] =>
            [advanced_fees] =>
            [equipments] =>
            [about_service] =>
            [coins] => 500
            [created_at] => 2015-06-15 20:21:45
            [updated_at] => 2015-06-15 20:21:45
        )

    [relations:protected] => Array
        (
        )

    [hidden:protected] => Array
        (
        )

    [visible:protected] => Array
        (
        )

    [appends:protected] => Array
        (
        )

    [fillable:protected] => Array
        (
        )

    [dates:protected] => Array
        (
        )

    [casts:protected] => Array
        (
        )

    [touches:protected] => Array
        (
        )

    [observables:protected] => Array
        (
        )

    [with:protected] => Array
        (
        )

    [exists] => 1
)

VendorProfile和Client模型连接为:

VendorProfile模型中的

    protected $morphClass = 'MorphVendorProfile';

  // Defining 'Polymorphic' Relationship with Client Model
  public function client() {
    return $this->morphMany('App\models\Client', 'profile');
  }

我的config/app.php中有别名:

'MorphVendorProfile'=> 'App\models\VendorProfile'

在客户端模型中:

public function profile() {
        return $this->morphTo();
    }

更新

将代码从laravel 4.2迁移到laravel 5时发生此错误。所以现在,当我运行基于4.2版本和SAME数据库的先前代码时,它并没有给我任何错误,所以我认为问题在于代码,而不是数据库。我确信'变形'存在问题。关系,我必须在迁移过程中稍微修改一下,使其在其他页面上工作。

这是我的Eloquent / Model.php中的morphTo函数:

/**
 * Define a polymorphic, inverse one-to-one or many relationship.
 *
 * @param  string  $name
 * @param  string  $type
 * @param  string  $id
 * @return \Illuminate\Database\Eloquent\Relations\MorphTo
 */
public function morphTo($name = null, $type = null, $id = null)
{
    // If no name is provided, we will use the backtrace to get the function name
    // since that is most likely the name of the polymorphic interface. We can
    // use that to get both the class and foreign key that will be utilized.
    if (is_null($name))
    {
        list(, $caller) = debug_backtrace(false, 2);

        $name = snake_case($caller['function']);
    }

    list($type, $id) = $this->getMorphs($name, $type, $id);

    // If the type value is null it is probably safe to assume we're eager loading
    // the relationship. When that is the case we will pass in a dummy query as
    // there are multiple types in the morph and we can't use single queries.
    if (is_null($class = $this->$type))
    {
        Log::info('eagerly loading');
        return new MorphTo(
            $this->newQuery(), $this, $id, null, $type, $name
        );
    }

    // If we are not eager loading the relationship we will essentially treat this
    // as a belongs-to style relationship since morph-to extends that class and
    // we will pass in the appropriate values so that it behaves as expected.
    else
    {
        Log::info('not eagerly loading');
        Log::info($class);
        $instance = \App::make('\App\models\\'.$class);
        $output = print_r($instance,1);
        Log::info('*'.$output.'*');
        return new MorphTo(
            $instance->newQuery(), $this, $id, $instance->getKeyName(), $type, $name
        );
    }
}

1 个答案:

答案 0 :(得分:0)

检查您的命名空间。确保您设置的多态关系引用供应商和客户端模型中的完整命名空间