gpt4 book ai didi

php - Laravel 5 hasManyThrough

转载 作者:可可西里 更新时间:2023-11-01 12:35:29 26 4
gpt4 key购买 nike

我有 3 个表:company <-> users <-> invoice

公司 hasMany 用户。

一个用户 belongsTo 一个公司并且一个用户 hasMany 发票。

一张发票属于一个用户。

现在我有一张包含用户(客户)信息的发票,我想让用户了解其公司信息,所以我做了一个:

一张发票hasManyThrough users, company (so gets the company through user)

现在它无法正常工作。

模型:

class Company extends Eloquent {

protected $table = 'companies';

public function users()
{
return $this->hasMany('App\User', 'id');
}

public function invoices()
{
return $this->hasManyThrough('App\Company', 'App\User');
}
}

class User extends Model {

protected $table = 'users';

public function usertype()
{
return $this->belongsTo('App\UserType','usertype_id','id');
}

public function company()
{
return $this->belongsTo('App\Company','company_id','id');
}

public function invoice()
{
return $this->hasMany('App\Invoice');
}

}

class Invoice extends Model {

protected $table = 'invoices';

public function users() {
return $this->belongsTo('App\User', 'id');
}
}

发票 Controller :

class InvoiceController extends Controller {

private $invoice;

public function __construct(Invoice $invoice)
{
$this->invoice = $invoice;
}

public function index(Invoice $invoice)
{
$invoices = $invoice->with('users', 'company')->get();

dd($invoices);

return view('invoice.index', compact('invoices'));
}

public function create()
{
//
}

public function store()
{

}

public function show($id)
{
$invoice = Invoice::with('users')->find($id);

return view('invoice.show', compact('invoice'));
}

public function edit($id)
{
//
}

public function update($id)
{
//
}

public function destroy($id)
{
//
}
}

dd($invoices) 会给出一个 BadMethodCallException
调用未定义的方法 Illuminate\Database\Query\Builder::company()

可以提供任何进一步需要的信息!

最佳答案

假设我们有表 A、B 和 C其中表 A 有很多 B (OneToMany),B 有很多 C (OneToMany)为了从表 A 访问表 C,您可以在表 A 上使用 Laravel 快捷方式 (HasManyThrough),问题就解决了

但是 如果您有表 A、B 和 C其中表 A 有很多 B (OneToMany),B 有很多 C (ManyToMany)您不能使用 laravel 的 (HasManyThrough) 快捷方式从表 A 访问表 C,{因为数据透视表位于 B 和 C 之间}在这种情况下您可以做的非常简单:

在此示例中,表 A 将是 [类(class)],表 B 将是 [章节],表 C 将是 [视频]每门类(class)都有许多章节,而一章只能属于一门类(class)。另一方面,每一章都有很多视频,而一个视频可以属于很多章。

<?php namespace Moubarmij\Models;

use Eloquent;

class Video extends Eloquent{

protected $table = 'videos';

/*************************************************************
* Query Scopes
**************************************************************/

public function scopePublished($query)
{
return $query->where('published', '=', '1');
}

public function scopeOrdered($query)
{
return $query->orderBy('order_number', 'ASC');
}

/*************************************************************
* Relations
**************************************************************/

public function chapters()
{
return $this->belongsToMany('Moubarmij\Models\Chapter', 'chapters_videos');
}


}

<?php namespace Moubarmij\Models;

use Eloquent;

class Chapter extends Eloquent{

protected $table = 'chapters';

/*************************************************************
* Query Scopes
**************************************************************/

public function scopePublished($query)
{
return $query->where('published', '=', '1');
}

public function scopeOrdered($query)
{
return $query->orderBy('order_number', 'ASC');
}

public function scopeWithVideos($query)
{
return $query->with(['videos' => function($q)
{
$q->ordered();
}]);
}


/*************************************************************
* Relations
**************************************************************/

public function course()
{
return $this->belongsTo('Course');
}

public function videos()
{
return $this->belongsToMany('Moubarmij\Models\Video', 'chapters_videos');
}

}

<?php namespace Moubarmij\Models;

use Eloquent;

class Course extends Eloquent{

protected $table = 'courses';

/*************************************************************
* Query Scopes
**************************************************************/

public function scopeVisible($query)
{
return $query->where('visible', '=', '1');
}

public function scopeOrdered($query)
{
return $query->orderBy('order_number', 'ASC');
}

public function scopeWithChapters($query)
{
return $query->with(['chapters' => function($q)
{
$q->ordered();
}]);
}

public function scopeWithChaptersAndVideos($query)
{
return $query->with(['chapters' => function($q)
{
$q->ordered()->withVideos();
}]);
}


/*************************************************************
* Relations
**************************************************************/

public function chapters()
{
return $this->hasMany('Moubarmij\Models\Chapter');
}


}

关于php - Laravel 5 hasManyThrough,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30529224/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com