Japa
Japa

Reputation: 632

Laravel relation one to many get results joined

I'm kinda lost one this one, I really can't find the problem, I have been watching a lot of questions all over the web but still can't seem to put this working properly.

I have two tables, the tabelaAngaricao table and the tabelaFotos table with a relationship of one-to-many, meaning that a tabelaAngariacao can have many tabelaFotos, and tabelaFotos as a angariacaoid(foreign key) so my tabelaAngariacao model is:

namespace App;

use Illuminate\Database\Eloquent\Model;
use App\TabelaFotos;

class TabelaAngariacao extends Model
{
    protected $table = 'tabelaAngariacao'; 
    public function TabelaFotos()
    {
        return $this->hasMany(TabelaFotos::class, 'angariacaoid');
    }
}

and my tabelaFotos model is:

namespace App;

use Illuminate\Database\Eloquent\Model;
use App\TabelaAngariacao;

class TabelaFotos extends Model
{
    protected $table = 'tabelaFotos'; 

    public function TabelaAngariacao()
    {
        return $this->belongsTo('App\TabelaAngariacao');
    }
}

What I want is to get all results joined by the angariacaoid, so in my controller I have:

public function index()
    {

        $results = DB::table('tabelaAngariacao')
            ->leftJoin('tabelaFotos', 'tabelaAngariacao.id', '=', 'tabelaFotos.angariacaoid')
            ->select('tabelaAngariacao.*')
            ->get();

    }

Could someone help me on finding the problem? What is that I'm doing wrong?

Upvotes: 2

Views: 57

Answers (2)

Gabriel Adewumi
Gabriel Adewumi

Reputation: 47

And probably you don't need to use DB::table, you can use Eloquent Queries instead, since you've defined your relationsips

You can try it by doing this.

$results = TabelaFotos::with('TabelaAngariacao')->get();

Here is how it works

$results = ModelName::with('relationship_in_model_name')->get();

Hope it works

Upvotes: 1

Ayaz Ali Shah
Ayaz Ali Shah

Reputation: 3531

You don't need to add select. Try following

$results = DB::table('tabelaAngariacao')
->leftJoin('tabelaFotos', 'tabelaAngariacao.id', '=', 'tabelaFotos.angariacaoid')
->get();

The above script will give you columns from both tables.

Upvotes: 4

Related Questions