Ho 3 tabelle: company
< ->users
< ->invoice
.Laravel 5 hasManyThrough
A società hasMany
utenti.
Un utente belongsTo
una società e, e un utente hasMany
fatture.
Una fattura belongsTo
un utente.
Ora ho una fattura con informazioni su utente (cliente), e voglio ottenere l'utente le sue informazioni sulla società così ho fatto un:
Una fattura hasManyThrough
utenti, società (così ottiene la società attraverso utente)
Ora non funziona come è necessario.
Modelli:
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 Fattura:
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)
{
//
}
}
Il dd ($ fatture) daranno informazioni BadMethodCallException Call to undefined method Illuminate\Database\Query\Builder::company()
Ogni ulteriore necessaria può essere fornito!
Devo utilizzare anche gli ambiti di query o solo le relazioni? – Liam
@Synyster non è necessario utilizzare gli ambiti ma sono molto raccomandati, dal momento che senza di essi si ripeterà questa pace di codice ovunque venga utilizzata.Tuttavia lo scope più importante in questo esempio se 'scopeWithChaptersAndVideos' se si desidera avere i suoi risultati senza usare l'scope dovrà scrivere il suo contenuto e sostituire' withVideos 'con il contenuto di tale scope e anche dal modello video. –