Laravel外键参考

时间:2018-08-29 17:04:11

标签: laravel laravel-5.5

我试图通过一种关系引用外键的描述,如下所示:

我的模特。

namespace App;

use Illuminate\Database\Eloquent\Model;

class Evento extends Model
{
    //
    protected $fillable = [
        'idEvento',
        'strNombreEvento',
        'strDireccion',
        'strCiudad',
        'strCorreo',
        'strTelefono',
        'strEncargadoEvento',
        'strNotas',
        'idEscuela',
    ];

    protected $primaryKey = 'idEvento';

    public function escuela()
    {
        return $this->belongsTo('App\Escuela','idEscuela');
    }

    public function diaevento()
    {
        return $this->hasMany('App\diaEvento');
    }    
}

关系

namespace App;

use Illuminate\Database\Eloquent\Model;

class Escuela extends Model
{
    //
    protected $fillable = [
        'idEscuela',
        'strNombreEscuela',
        'bolPrincipal',
        'strLogo',
        'sitDiasUsuarioInactivo',
        'sitDiasToleranciaCobro',


    ];

    protected $primaryKey = 'idEscuela';



    public function grupos()
    {
        return $this->hasMany('app\grupo');
    }

    public function eventos()
    {
        return $this->hasMany('app\eventos');
    }


}

我的观点

  @extends('layouts.app')


  @section('content')    



  @guest
  @else

  <nav class="navbar navbar-dark sticky-top bg-dark flex-md-nowrap p-0">
    <a class="navbar-brand col-sm-3 col-md-2 mr-0" href="#">Eventos</a>
  </nav>

  <div class="container-fluid">
    <div class="row">
      <nav class="col-sm-1 d-md-block bg-light sidebar">
        <div class="sidebar-sticky">

          <h6 class="sidebar-heading d-flex justify-content-between align-items-center px-3 mt-4 mb-1 text-muted">
            <span>Acciones</span>
            <a class="d-flex align-items-center text-muted" href="#">
              <span data-feather="plus-circle"></span>
            </a>
          </h6>

          <ul class="nav flex-column">
            <li class="nav-item">
                <span data-feather="home"></span>
                 <span class="sr-only"></span>
            </li>
            <li class="nav-item">
              <a class="nav-link" href="/gymmgr/public/eventos/create">
                <span data-feather="file"></span>
                Nuevo
              </a>
          </ul>

        </div>
      </nav>

      <main role="main" class="col-md-9 ml-sm-auto col-lg-10 pt-3 px-4">
        <div class="d-flex justify-content-between flex-wrap flex-md-nowrap align-items-center pb-2 mb-3 border-bottom">
          <h1 class="h5">Catálogo</h1>
          <div class="btn-toolbar mb-2 mb-md-0">
            <div class="btn-group mr-2">
              <button class="btn btn-sm btn-outline-secondary">Exportar</button>
            </div>
          </div>
        </div>



<table class="table">
  <thead class="thead-light">

    <tr>
      <th>Evento</th>
      <th>Escuela</th>
      <th>Dirección</th>
      <th>Ciudad</th>
      <th>Correo</th>
      <th>Teléfono</th>
      <th>Contacto</th>

   </tr>
  </thead>
  <tbody>
    @foreach($eventos as $evento)
    <tr>
      <td> <a href="/gymmgr/public/eventos/{{ $evento->idEvento }}">{{ $evento->strNombreEvento }} </a></td>
      <td>{{ $evento->escuela->strNombreEscuela }}</td>
      <td>{{ $evento->strDireccion }} </td>
      <td>{{ $evento->strCiudad }} </td>
      <td>{{ $evento->strCorreo }} </td>
      <td>{{ $evento->strTelefono }} </td>
      <td>{{ $evento->strEncargadoEvento }} </td>
    </tr>

    @endforeach

  </tbody>
</table>




      </main>
    </div>
  </div>

 @endguest

@endsection

我的控制器

public function index()
{
    //
    $eventos = evento::all();
    return view('eventos.index', ['eventos'=>$eventos]);

}

结果。

enter image description here

问题是相同的机制正在处理另一个模型,我将其发布:

namespace App;

use Illuminate\Database\Eloquent\Model;

class grupo extends Model
{
    //
    protected $fillable = [
        'idGrupo',
        'idEscuela',
        'strNombreGrupo',

    ];

    protected $primaryKey = 'idGrupo';

    public function escuela()
    {
        return $this->belongsTo('App\Escuela','idEscuela');
    }

    public function horarioGrupo()
    {
        return $this->hasMany('App\horario_Periodicos');
    }


}

关系与上面的evento相同。

我的观点

@extends('layouts.app')


@section('content')    



@guest
@else

    <nav class="navbar navbar-dark sticky-top bg-dark flex-md-nowrap p-0">
      <a class="navbar-brand col-sm-3 col-md-2 mr-0" href="#">Grupos</a>
    </nav>

    <div class="container-fluid">
      <div class="row">
        <nav class="col-sm-1 d-md-block bg-light sidebar">
          <div class="sidebar-sticky">

            <h6 class="sidebar-heading d-flex justify-content-between align-items-center px-3 mt-4 mb-1 text-muted">
              <span>Acciones</span>
              <a class="d-flex align-items-center text-muted" href="#">
                <span data-feather="plus-circle"></span>
              </a>
            </h6>

            <ul class="nav flex-column">
              <li class="nav-item">
                  <span data-feather="home"></span>
                   <span class="sr-only"></span>
              </li>
              <li class="nav-item">
                <a class="nav-link" href="/gymmgr/public/grupos/create">
                  <span data-feather="file"></span>
                  Nuevo
                </a>
            </ul>

          </div>
        </nav>

        <main role="main" class="col-md-9 ml-sm-auto col-lg-10 pt-3 px-4">
          <div class="d-flex justify-content-between flex-wrap flex-md-nowrap align-items-center pb-2 mb-3 border-bottom">
            <h1 class="h5">Catálogo</h1>
            <div class="btn-toolbar mb-2 mb-md-0">
              <div class="btn-group mr-2">
                <button class="btn btn-sm btn-outline-secondary">Exportar</button>
              </div>
            </div>
          </div>



  <table class="table">
    <thead class="thead-light">

      <tr>
        <th>Nombre del grupo</th>
        <th>Escuela</th>
     </tr>
    </thead>
    <tbody>
        @foreach($grupos as $grupo)
      <tr>
        <td> <a href="/gymmgr/public/grupos/{{ $grupo->idGrupo }}">{{ $grupo->strNombreGrupo }} </a>></td>
        <td>{{ $grupo->escuela->strNombreEscuela }}</td>
      </tr>

      @endforeach

    </tbody>
  </table>




        </main>
      </div>
    </div>

@endguest

 @endsection

控制器

public function index()
{
    //
    $grupos = grupo::all();
    return view('grupos.index', ['grupos'=>$grupos]);

}

感谢您的帮助。

谢谢。

我发布了迁移信息,这些迁移信息今天已添加

原始Evento

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateEventosTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('eventos', function (Blueprint $table) {
            $table->increments('idEvento');
            $table->string('strNombreEvento', 200);
            $table->string('strDireccion', 200);
            $table->string('strCiudad', 200);
            $table->string('strCorreo', 200);
            $table->string('strTelefono', 20);
            $table->string('strEncargadoEvento', 60);
            $table->string('strNotas', 300);

            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('eventos');
    }
}

这些是转储,是在外国表的直接引用中思考的 从Evento到Escuela,没有中介。

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class DeleteDiasEventoTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        //
        Schema::dropIfExists('dias_eventos');
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        //
                Schema::create('dias_eventos', function (Blueprint $table) {
            $table->increments('idDiasEventos');            
            $table->integer('idEvento')->unsigned();
            $table->foreign('idEvento')->references('idEvento')->on('eventos');
            $table->integer('idDiaEventos')->unsigned();
            $table->foreign('idDiaEventos')->references('id')->on('dia_eventos');
            $table->unique(['idEvento','idDiaEventos']);
            $table->timestamps();
        });
    }
}

然后我修改了Evento,包括外键本身。

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class ModifyEventoTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        //
         Schema::table('eventos', function($table) {
                $table->integer('idEscuela')->unsigned();
                $table->foreign('idEscuela')->references('idEscuela')->on('escuelas');

            });

    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
                Schema::table('eventos', function (Blueprint $table) {
            $table->dropForeign('eventos_idescuela_foreign');
            $table->dropColumn('idEscuela');
        });

    }
}

1 个答案:

答案 0 :(得分:0)

您的查询返回数组还是对象?如果将其转储出去,您可能会发现它是一个数组,而您需要的只是数组访问([])而不是对象访问(->)。