Laravel - las relaciones no me estan funcionando

 
Vista:
sin imagen de perfil
Val: 5
Ha aumentado 1 puesto en Laravel (en relación al último mes)
Gráfica de Laravel

las relaciones no me estan funcionando

Publicado por aaron (3 intervenciones) el 21/03/2018 19:08:38
Hola buenas,

estoy teniendo problemas con las relaciones ya que al buscar cierta información no me la muestra. Tengo 3 tablas relacionadas (Articles, User, Comentarios).
Las relaciones son de la siguiente forma:

Un articulo puede tener muchos comentarios, y un comentario pertenece a un solo articulo.
Un usuario puede hacer muchos comentarios, pero un comentario solo puede pertenecer a un articulo.

Cuando quiero obtener la info de articulo_id y usuario_id de la tabla comentarios, me trae los campos nulos. Os dejo los archivos y la info correspondiente a ver si me podeis echar una mano. En bbdd las relaciones aparecen de forma correcta y añado bien la info.

Article.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
use Illuminate\Database\Eloquent\Model;
 
class Article extends Model
{
    protected $table = "articles";
 
    protected $fillable = ['title','description','user_id','category_id'];
 
    //un articulo es de un solo usuario
    public function user(){
 
    	return $this->belongsTo('App\User');
 
    }
 
 
    //un articulo puede contener una sola categoria
    public function category(){
 
        return $this->belongsTo('App\Category');
 
    }
 
 
    //un articulo puede contener varias imagenes
    public function image(){
 
    	return $this->hasMany('App\Image');
 
    }
 
 
    public function tags(){
 
        return $this->belongsToMany('App\Tag');
 
 
    }
 
    //un articulo puede tener varios comentarios
    public function comentario(){
 
        return $this->hasMany('App\Comentarios');
          //return $this->hasMany('Comentarios::class');
    }
 
 
    public function scopeSearch($query, $title){
 
        //nombre  de la columna donde busca, 'como', contenido que va a buscar
        return $query->where('title','LIKE',"%$title%");
 
    }
 
}

User.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
<?php
 
namespace App;
 
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
 
class User extends Authenticatable
{
    use Notifiable;
 
    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name', 'email', 'password',
    ];
 
    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];
 
 
    //un user puede tener varios articulos
    public function articles(){
 
        return $this->hasMany('App\Article');
 
    }
 
 
    //un user puede tener varios comentarios
    public function comentario(){
 
        return $this->hasMany('App\Comentarios');
        //return $this->hasMany('Comentarios::class');
    }
 
 
    public function scopeSearch($query, $name){
 
        //nombre  de la columna donde busca, 'como', contenido que va a buscar
        return $query->where('name','LIKE',"%$name%");
 
    }
 
 
}

Comentarios.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?php
 
namespace App;
 
use Illuminate\Database\Eloquent\Model;
 
class Comentarios extends Model
{
    protected $table = "comentarios";
 
    protected $fillable = ['comentarios','articulo_id','usuario_id'];
 
 
    //un comentario es de un solo usuario
    public function user(){
 
        return $this->belongsTo('App\User');
        //return $this->belongsTo(User::class,'id');
    }
 
    //un comentario es de un solo articulo
    public function article(){
 
        return $this->belongsTo('App\Article');
        //return $this->belongsTo(Article::class,'id');
    }
 
 
}


En la vista tengo un formulario desde el cual añado los comentarios:

vista:

1
2
3
4
5
6
7
8
9
10
11
<!--La ruta hace referencia al metodo utilizado por el formulario-->
                              {{Form::open(['route'=>['eventospena.store',$article],'method'=>'PUT','files'=>true])}}
 
                                 <div class="form-group">
                                  {{Form::text('comentarios',null,['class'=>'form-control','placeholder'=>'Añade tu comentario','required'])}}
                                </div>
                                <!--botón submnit-->
                                <div class='form-group'>
                                  {{Form::submit('Enviar comentario',['class'=>'btn btn-primary'])}}
                                </div>
                              {{Form::close()}}

y en el controlador tengo dos metodos (store para almacenar el comentario e index para mostrar la info)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
public function index(Request $request){
 
 
		\DB::connection()->enableQueryLog();
 
		$articles = Article::orderBy('id','DESC')->where('category_id', '=', 1)->paginate(6);
 
 
 
		$articles->each(function($articles){
			$articles->category;
			$articles->image;
 
		});
 
		  $comentarios = Comentarios::orderBy('id','ASC')->paginate(10);
 
 
 
		//las relaciones no estan funcionando ok, no me trae la info de article y user
		$comentarios->each(function($comentarios){
 
			$comentarios->user;
			$comentarios->article;
 
		});
 
		//$query=\DB::getQueryLog();
		//dd($query);
 
		//dd($comentarios);
 
 
 
		return View('eventospena')->with('articles',$articles)->with('comentarios',$comentarios);
		//return View('eventospena')->with('articles',$articles);
 
	}
 
 
	public function __construct(){
		Carbon::setLocale('es');
	}
 
	/*metodo para agregar comentarios a los articulos*/
	public function store(Request $request,$id){
 
 
		//creamos un nuevo objeto para comentarios
		$comentarios = new 	Comentarios($request->all());
		$comentarios->usuario_id = \Auth::user()->id;
		//dd($comentarios);
 
 
		$articles=Article::find($id);
		//dd($articles);
 
    	$comentarios->articulo_id = $articles->id;
    	//dd($comentarios);
 
		$comentarios->save();
 
		flash('El comentario se ha creado correctamente')->success();
 
 
 
	}

Al hacer el dd para que me muestre la info de $comentarios en el metodo index y ver la info de las relaciones ,me muestra lo siguiente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
LengthAwarePaginator {#287 ▼
  #total: 6
  #lastPage: 1
  #items: Collection {#307 ▼
    #items: array:6 [
      0 => Comentarios {#308 ▼
        #table: "comentarios"
        #fillable: array:3 []
        #connection: "mysql"
        #primaryKey: "id"
        #keyType: "int"
        +incrementing: true
        #with: []
        #withCount: []
        #perPage: 15
        +exists: true
        +wasRecentlyCreated: false
        #attributes: array:6 [
          "id" => 38
          "comentarios" => "prueba"
          "articulo_id" => 9
          "usuario_id" => 13
          "created_at" => "2018-03-17 12:22:05"
          "updated_at" => "2018-03-17 12:22:05"
        ]
        #original: array:6 [
          "id" => 38
          "comentarios" => "prueba"
          "articulo_id" => 9
          "usuario_id" => 13
          "created_at" => "2018-03-17 12:22:05"
          "updated_at" => "2018-03-17 12:22:05"
        ]
        #casts: []
        #dates: []
        #dateFormat: null
        #appends: []
        #events: []
        #observables: []
        #relations: array:2 [
          "user" => null
          "article" => null
        ]
        #touches: []
        +timestamps: true
        #hidden: []
        #visible: []
        #guarded: array:1 []
      }
      1 => Comentarios {#309 ▶}
      2 => Comentarios {#310 ▶}
      3 => Comentarios {#311 ▶}
      4 => Comentarios {#312 ▶}
      5 => Comentarios {#313 ▶}
    ]
  }
  #perPage: 10
  #currentPage: 1
  #path: "http://localhost/laravel/public/eventospena"
  #query: []
  #fragment: null
  #pageName: "page"
}

Como veis me trae todos los comentarios con su info correpondiente, los valores de
articulo_id y de usuario_id que apriori estan bien, pero las relaciones me muestra un null.

espero que me podais ayudar.

Muchas gracias!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 5
Ha aumentado 1 puesto en Laravel (en relación al último mes)
Gráfica de Laravel

las relaciones no me estan funcionando

Publicado por aaron (3 intervenciones) el 28/03/2018 14:18:30
ENCONTRE EL ERROR!

La solución es que en las relaciones tenia que forzar cual era la foreign key de cada relación:

https://laravel.com/docs/5.4/eloquent-relationships#one-to-many

espero que le ayude a alguien!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar