Tenho o seguinte cenário e não consigo resolver. Se alguem conseguir por favor me clarear as ideias.
Tenho uma tabela noticias e gostaria que cada noticia tivesse mais que uma categoria e subcategoria.
Criei uma tabela "noticia_categorias_relacionadas" informando o ID da noticia e suas respectivas categorias e subcategorias.
Como montar um sql puxando dessas tabelas?
Desde ja agradeço.
Consegui resolver com um relacionamento simples entre duas tabelas, tipo, um select normal. Obrigado
Sei que meu modelo não está bem certo, gostaria que pudessem me ajudar.
https://udemy-images.s3.amazonaws.com/redactor/raw/2017-08-31_05-11-29-ea577932f32b32dc3d8ddffb2df8941b.jpg
https://udemy-images.s3.amazonaws.com/redactor/raw/2017-08-31_17-04-28-9bd01e59268463feac5400c331a8e5ce.png
Como se comporta uma relação aonde tenho Usuários e esses relacionamentos, me disseram 1..n --- 1..n mas eu acho que seja 1..1 --- 1..1
E como relaciono dois usuários com empréstimo por exemplo no modelo lógico? Preciso de 2 chaves estrangeiras para id-usuario e os livros? Meu professor disse que não pode ter 2 relações entre tabelas.
Preciso mesmo de ajuda para montar esse banco, o que estou achando mais difícil, é como ter essas relações aonde preciso de 2 usuários, por exemplo numa avaliação preciso saber quem fez e quem recebeu? Empréstimo que solicitou e quem recebeu? assim por diante.
Estou tentando fazer o relacionamento entre 3 tabelas no laravel. Com 2 tabelas eu consegui, graças a ajuda do fórum, mas não estou conseguindo fazer funcionar com 3 tabelas. o relacionamento é o seguinte:
Tenho 3 tabelas:
Noticias, Fotos e Unidade (unidades escolares)
tabela noticia -> id_noticias
tabela fotos-> id_fotos e id_noticias
tabela noticia_unidade -> id_noticias e id_unidade
O relacionamento noticias com fotos está ok: na página principal aparecem 2 noticias e uma foto de cada. Agora preciso que seja filtrado por unidade: Na página da faculdade aparecer apenas as noticias da uniadde 2, por exemplo.
Seguem os models e controllers:
Controller
public function index()
{
$not_faculdade = Noticia::with(['foto' => function($query){
$query->get()->first();
}])
->with(['unidade' => function($query2){
$query2->where('id_unidade','2')
->get();
}])
->orderBy('id_noticias','DESC')
->take(2)
->get();
// dd($not_faculdade);
return view('pages_faculdade.noticia')->with('not_faculdade',$not_faculdade);
}
Relacionamentos
class Noticia extends Model
{
protected $table = 'noticias';
protected $primaryKey = 'id_noticias';
public $timestamps = false;
protected $dates = ['data'];
protected $fillable =[
'texto',
'titulo',
'legenda',
'pasta',
'subtitulo',
'evento',
'titulo_evento'
];
public function foto()
{
//return $this->hasMany(Foto::class);
return $this->hasMany('App\Foto','id_noticia','id_noticias');
}
public function unidade()
{
//return $this->hasMany(Foto::class);
return $this->belongsTo('App\Unidade','id_noticias','id_noticia');
}
}
class Unidade extends Model
{
protected $table = 'noticia_unidade';
// protected $primaryKey = 'id_noticia, id_unidade';
public $timestamps = false;
protected $dates = ['deleted_at'];
protected $fillable = [
'id_unidade',
'id_noticia'
];
public function noticias()
{
return $this->hasMany('App\Noticia','id_noticias','id_noticia');
}
}
na view está assim:
@foreach ($not_faculdade as $key=> $not)
<div class="col-md-6">
<div class="panel-heading">
<div class="painel_foto"><img src={{asset('public/'.$not->foto[0]->endereco)}}></div>
<h4>{{ $not->titulo }}</h4>
<p align="justify">
<a href="#" class="noticia">
{{$texto = substr($not->texto,0,150)." ..."}}
</a>
</p>
</div>
</div>
@endforeach
Como disse, as 2 noticias com a foto de "capa" aparecem normalmente, mas não funciona o filtro.
Se eu der um dd($not_faculdade), é mostrado os relacionamento aparentemente certos!
Olá amigos, segue em anexo um diagrama onde faço o relacionamento entre entidades, subentidades e atributos. Gostaria que pessoas mais experientes comentassem e me apresentassem um senso crítico a respeito.
Boa tarde!
Tenho uma tabela de notícias e uma tabela de fotos. Cada notícia possui várias fotos. Na home tem que aparecer as duas últimas notícias e a respectiva foto de destaque.
os Models estão assim:
class Noticia extends Model
{
protected $table = 'not_noticias';
protected $primaryKey = 'id_noticias';
public $timestamps = false;
protected $dates = ['deleted_at'];
protected $fillable =[
'texto',
'titulo',
'legenda',
'pasta',
'subtitulo',
'evento',
'titulo_evento'
];
public function foto()
{
//return $this->hasMany(Foto::class);
return $this->hasMany('App\Foto','id_noticia','id_noticias');
}
}
class Foto extends Model
{
protected $table = 'not_fotos';
protected $primaryKey = 'id_foto';
public $timestamps = false;
protected $dates = ['deleted_at'];
protected $fillable = [
'nome',
'endereco',
'id_noticia'
];
public function noticias()
{
return $this->belongsTo('App\Noticia','id_noticias','id_noticia');
}
}
O controller está assim:
Class NoticiasController extends Controller
{
public function index()
{
}
public function noticia()
{
$noticias = Noticia::with(['Foto' => function($query){
$query->get()->first();//first()find(1)
}])
->orderBy('id_noticias','DESC')
->take(2)
->get();
//dd($noticias);
return view('inc_home.noticias')->with('noticias',$noticias);
}
}
na view noticias.blase.php está assim;
@foreach ($noticias as $key=> $not)
<div class="col-md-6">
<div class="panel-heading">
<img src={{asset('public/'.$not->fotos->endereco)}}>
<h4>{{ $not->titulo }}</h4>
<p align="justify">
<a href="#" class="noticia">
{{$texto = substr($not->texto,0,150)." ..."}}
</a>
</p>
</div>
</div>
@endforeach
Ao tentar exibir a view, aparece: Trying to get property of non-object (View: C:\xampp\htdocs\pro_fundec\resources\views\inc_home\noticias.blade.php)
Não sei o que está errado!
Se na view eu deixo apenas assim: <img src={{asset('public/'.$not->endereco)}}> aparece o titulo e texto, mas as imagens não