猿问

为什么 BelongsTo() 在 Laravel 6 中不起作用?

我有两个模型User和AccountType


class User extends Authenticatable

{

    (...)


    public function accountType()

    {

        return $this->belongsTo('App\AccountType', 'account_type_id', 'id');

    }

}

class AccountType extends Model

{

  protected $table = 'account_types';

  // protected $primaryKey = 'id';


  public function users()

  {

      return $this->hasMany('App\User');

  }

}

我的数据库:


        Schema::create('users', function (Blueprint $table) {

            $table->bigIncrements('id');

            $table->bigInteger('account_type_id')->unsigned();

            $table->foreign('account_type_id')->references('id')->on('account_types');

            $table->string('full_name');

            $table->string('email')->unique();

            $table->timestamp('email_verified_at')->nullable();

            $table->string('password');

            $table->rememberToken();

            $table->timestamps();

        });

        Schema::create('account_types', function (Blueprint $table) {

            $table->bigIncrements('id');

            $table->string('account_type_name');

        });

当我使用 hasMany 时 - 一切都像魅力一样,但是当我尝试使用$user->accountType->account_type_name它时却不起作用。我用来打印用户的循环:


                @foreach ($users as $user)

                  <tr>

                    <td>{{ $user->full_name }}</td>

                    <td>

                      <a href="#" class="badge badge-pill badge-warning">No team</a>

                    </td>

                    <td>

                      xyz

                    </td>

                    <td> {{ $user->accountType->account_type_name }} </td>

                    <td><a href="mailto:{{ $user->email }}">{{ $user->email }}</a></td>

                    <td>{{ $user->created_at }}</td>

                  </tr>

                @endforeach

和错误。当我注释掉$user->accountType->account_type_name它时, 它工作正常。


ErrorException

Undefined offset: 1

详情在这里 - https://flareapp.io/share/jKPgOZPa


拉莫斯之舞
浏览 195回答 3
3回答

繁华开满天机

您需要使用蛇盒而不是骆驼盒:<td>&nbsp;{{&nbsp;$user->account_type->account_type_name&nbsp;}}&nbsp;</td>

函数式编程

看起来你定义了错误的关系。你的用户模型应该是这样的:class User extends Authenticatable{&nbsp; &nbsp; (...)&nbsp; &nbsp; public function accountType()&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; return $this->hasOne('App\AccountType', 'account_type_id', 'id');&nbsp; &nbsp; }}和帐户类型模型应该是这样的:class AccountType extends Model{&nbsp; &nbsp; &nbsp;protected $table = 'account_types';&nbsp; &nbsp; // protected $primaryKey = 'id';&nbsp; &nbsp; public function user()&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp;return $this->belongsTo('App\User');&nbsp; &nbsp; }}

摇曳的蔷薇

你可以试试这个..我的工作正常..$user->accountType->first()&nbsp;->account_type_name
随时随地看视频慕课网APP
我要回答