mercredi 16 mars 2016

Laravel 5 select only relationship data on hasMany relationship

I am building an application that has projects and projects have plot_types.

I want to be able to check if a plot_type exists under the current project.

I have the following code:

$testResult = $project->with(['plotTypes' => function($query) use ($row) {
            $query->where('name', $row->plot_name);
        }])->first()

This produces the following MySQL:

select exists(select * from `projects` where exists (select * from `projects_plot_types` where `projects_plot_types`.`project_id` = `projects`.`id` and `name` = ?)) as `exists`

This SQL returns rows that are NOT related to the $project object. For example when I do dd($project) I get:

#attributes: array:11 [▼
    "id" => "4"
    "name" => "xxx"
    "number" => "1234"
    "builder" => "1"
    "overall_budget" => "3456.00"
    "start_date" => "2016-03-31"
    "end_date" => "2016-04-30"
    "created_date" => "2016-03-16 15:22:05"
    "updated_date" => "2016-03-16 15:22:07"
  ]

Yet, when I do dd($testResult); it gives;

#relations: array:1 [▼
"plotTypes" => Collection {#767 ▼
  #items: array:1 [▼
    0 => ProjectsPlotTypes {#770 ▼
      #table: "projects_plot_types"
      #fillable: array:2 [▶]
      +timestamps: false
      #connection: null
      #primaryKey: "id"
      #perPage: 15
      +incrementing: true
      #attributes: array:4 [▼
        "id" => "1"
        "project_id" => "1"
        "name" => "TYPE 1  - VENTILATION"
        "budget" => "324.67"
      ]

Notice, the project_id above shows 1. This is not related to the current project as the current project id is 4.

Why is this happening?



via Chebli Mohamed

Aucun commentaire:

Enregistrer un commentaire