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
User.php
Comentarios.php
En la vista tengo un formulario desde el cual añado los comentarios:
vista:
y en el controlador tengo dos metodos (store para almacenar el comentario e index para mostrar la info)
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:
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!
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


0