提问者:小点点

Laravel三方多对多雄辩的关系


我有这样的数据库
帐户

  • id
  • 名字

联系人
-id
-account\u id
账户通信
-id
-account\u id

和接触模型:

class Contact extends Model
{ 
    public function Account()
    {
       return $this->belongsTo('App\Account');
    }
   public function AccountCommunication()
   {
      return $this->hasManyThrough( 'App\AccountCommunication','App\Account');
   }
}

账户模型

 class Account extends Model
 {
     public function AccountCommunication()
      {
          return $this->hasMany('App\AccountCommunication');
      } 
    public function Contact()
    {
        return $this->hasMany('App\Contact');
     }
 }

会计沟通模式

class AccountCommunication extends Model
 {
      public function Account()
     {
          return $this->belongsToMany('App\Account');
      }
  }

在我的控制器上

class ContactController extends Controller
  {
     public function index()
     {
        $contacts = Contact::with('Account')->with('AccountCommunication')->paginate(10);
      dd($contacts);
     }
  }

告诉我这个错误

SQLSTATE[42S22]:找不到列: 1054未知的列'accounts.contact_id'在'字段列表'(SQL:选择account_communications.*,帐户.contact_idaccount_communications内连接>帐户帐户上。id=account_communicationsaccount_id其中帐户contact_idin(20))


共1个答案

匿名用户

我认为您误解了HasManyThrough关系,并将其与hasMany混为一谈。若你们仅仅通过一个例子看一下laravel Hasmany,你们就会对它的实际用途有更好的了解

countries
  id - integer
  name - string

users
    id - integer
    country_id - integer --> here is the key role for countries posts
    name - string

posts
    id - integer
    user_id - integer
    title - string

因为你的结构和它的用途大不相同。两边都有账户id,那你还在等什么?

只需通过account\u ide.x映射即可

class Contact extends Model
{ 
    public function Account()
    {
       return $this->belongsTo('App\Account');
    }
   public function AccountCommunication()
   {
      return $this->hasMany( 'App\AccountCommunication', 'account_id', 'account_id');
   }
}