Ir para conteúdo
GiselePassoni

Relacionamento com 3 tabelas no laravel

Recommended Posts

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!

O que poderia estar errado?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por emersonandree
      <script type="text/javascript"> $(document).ready(function(){ $('#btn_busca_f').click(function () { var data_ini = $('#data_ini').val(); var data_fim = $('#data_fim').val(); var cod_recurso = $('#cod_recurso').val(); var cod_funcionario = $('#cod_funcionario').val(); var num_op = $('#num_op').val(); $.ajax({ type: 'post', async: false, url: '/intranet/ExportaFimApontamento', data:{ '_token': '{{csrf_token()}}', 'data_ini': data_ini, 'data_fim': data_fim, 'cod_recurso': cod_recurso, 'cod_funcionario': cod_funcionario, 'num_op': num_op }, erro: function () { alert('erro'); }, success: function (data) { return (data); alert('Excel Gerado com Sucesso!'); } }); }); }); </script> este script executa uma função no controller onde ele gera um arquivo excel.xls, porem se eu executar a função direto no controler ele funciona, se eu executar com o script ele funciona mas nao gera o arquivo.xls alguem sabe como posso fazer para que ele baixe o arquivo la na função?
    • Por eduardojc
      Boa tarde pessoal, tenho uma tabela que busca os valores no meu MYSQL.

      Tenho um id ( 199917 ) por exemplo. Ele aparece 10x no meu banco de dados

      1 - 199917  data1 peso1
      2 - 199917  data2 peso2
      3 - 199917  data3 peso3
      ..... etc

      Precisaria retornar da seguinte forma minha tabela

      199917  - data1 peso1
                       data2 peso2
                       data3 peso3

      199939  - data1 peso1
                       data2 peso2
                       data3 peso3

      em anexo está as imagens, ficaria grato se puderem ajudar, dei uma pesquisada vi que tem rowspan, mas não faço ideia de como agrupar.

      Tabela 1 como está, tabela 2 como gostaria que ela fica-se

      meu Código:
      <div class="linha"></div> <div class="container"> <table class="table table-striped"> <thead class="thead-dark"> <tr> <th rowspan="1">Brinco</th> <th scope="col">Peso</th> <th scope="col">Data</th> <tr> </thead> @foreach($listagem as $lista) <tbody> <tr> <td rowspan="1">{{$lista->brinco_id }}</td> <td>{{$lista->peso }}</td> <td>{{ \Carbon\Carbon::parse($lista->data)->format('d/m/Y') }}</td> </tr> </tbody> @endforeach </table> </div>

    • Por antonio_milat
      Meu listener está sendo chamado duas vezes, mas o evento só é disparado uma vez.
      Eu copiei a base do código da documentação do Lumen 5.7 e aparentemente está tudo configurado corretamente. Não consigo encontrar o problema.
       
      bootstrap/app.php
      $app->register(App\Providers\EventServiceProvider::class);  
      app/Providers/EventServiceProvider.php
      protected $listen = [ 'App\Events\NewAuthEvent' => [ 'App\Listeners\SendNewAuthListener', ], ];  
      app/Events/NewAuthEvent.php
      use Illuminate\Queue\SerializesModels; use App\Data\Entity\User; use App\Data\Entity\Authorization; use Illuminate\Support\Facades\Log; class NewAuthEvent { use SerializesModels; public $user; public $auth; public function __construct(User $user, Authorization $auth) { Log::debug("Disparado uma vez"); $this->user = $user; $this->auth = $auth; } }  
      app/Listeners/SendNewAuthListener.php
      use App\Events\NewAuthEvent; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Contracts\Queue\ShouldQueue; use App\Data\Service\MessengerService; use Illuminate\Support\Facades\Log; class SendNewAuthListener { private $messenger; public function __construct(MessengerService $messenger) { Log::debug("Chamado duas vezes"); $this->messenger = $messenger; } public function handle(NewAuthEvent $event) { Log::debug("Chamado duas vezes também"); $this->messenger->new($event->user, $event->auth); } }  
      Disparando o evento:
      event(new NewAuthEvent($objUser, $objAuthorization)); Estou me esquecendo de algum parâmetro ou configuração? Agradeço desde já!
    • Por bobzznnn
      Preciso de um script que converta o saldo atual do meu website em bitcoin. Assim que eu possa colocar de forma que esteja junto ao "Valor" da conta.
      O Script que puxa o valor é esse:
       
      <div class="row">
          <div class="col-md-3 col-sm-6 col-xs-12">
              <div class="info-box">
                  <span class="info-box-icon bg-aqua"><i class="fa fa-usd"></i></span>
                  <div class="info-box-content">
                      <span class="info-box-text">MEU SALDO</span>
                      <span class="info-box-number">U$ <?php
                                      $saldo = Auth::user()->saldo;
                                      echo e(number_format($saldo, 2, '.', ','));
                                      ?></span>
                  </div>
                  
              </div>
          </div>
       

    • Por Air-Gear
      Olá a todos!
       
      Eu comecei mexer com Laravel hoje e até conseguir criar um novo projeto, mas eu preciso abrir e rodar um projeto existente e não estou conseguindo. Ele pede o arquivo autoload.php que não está no projeto. Eu já instalei o Banco de Dados desse projeto sem problemas. Eu instalei o Composer, mas não coloquei a URL de referência. Eu uso o Wamp Server 3.0.6, com Apache 2.4.23, PHP 5.6.25 e MySQL 5.7.14.
       
      Eu preciso instalar mais alguma coisa? Esqueci de fazer alguma configuração? Por favor, preciso de ajuda.
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.