Viendo los datos de tabla dinámica

mekol:

Estoy trabajando en una aplicación de biblioteca, y yo quiero crear una función, donde el usuario puede sacar un libro a un cliente. Así que tengo 2 mesas, booksy readersyo he creado una tabla dinámica, llamada book_readerasí a crear el método de pago. Sin embargo, tengo algunos problemas para mostrar los datos de esta tabla. He leído varios artículos sobre esto, pero no toman en cuenta que hay algunos datos de la tabla dinámica que contiene nueva información y no es sólo la unión de las 2 tablas. Estaría muy agradecida si alguien me podría ayudar con la forma en que puedo mostrar estos datos.

modelos:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Book extends Model
{
    protected $fillable = ['title', 'year', 'language_id', 'isbn', 'pages', 'user_id'];

public function readers()
    {
        return $this
            ->belongsToMany(Reader::class, 'book_reader')
            ->using(Checkout::class)
            ->withPivot(['returndate', 'maxreturndate']);
    }
}

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Reader extends Model
{
    protected $fillable = ['name', 'email', 'employee_number'];

    public function books()
    {
        return $this
            ->belongsToMany(Book::class, 'book_reader')
            ->using(Checkout::class)
            ->withPivot(['returndate', 'maxreturndate']);
    }
}

<?php

namespace App;

use Illuminate\Database\Eloquent\Relations\Pivot;

class Checkout extends Pivot
{
    $table = "book_reader";

    $dates = [
        "maxreturndate",
        "returndate",
    ];
}

migraciones:

<?php

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

class CreateCheckedOutsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('book_reader', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->bigInteger('book_id')->unsigned();
            $table->foreign('book_id')->references('id')->on('books')->onDelete('cascade');
            $table->bigInteger('reader_id')->unsigned();
            $table->foreign('reader_id')->references('id')->on('readers')->onDelete('cascade');
            $table->date('maxreturndate');
            $table->date('returndate')->nullable();
            $table->timestamps();
        });
    }

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

CheckedOutController:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Book;
use App\Reader;
use Illuminate\Support\Carbon;



class CheckedOutController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        $books = Book::doesntHave("readers")->get();
        $readers = Reader::all();

        return view('checkedouts/index', compact('books','readers'));
    }

index.blade.php:

@foreach($readers->books as $book)
      <tr>
        <td>{{$book->pivot->id}}</td>
        <td>{{$book->pivot->title}}</td>
        <td>{{$book->pivot->name}}</td>
        <td>{{$book->pivot->created_at}}</td>
        <td >{{$book->pivot->maxreturndate}}</td>
        <td>{{$book->pivot->returndate}}</td>
        <td></td>
miken32:

Su tabla dinámica contiene solamente returndatey maxreturndate, así como las marcas de tiempo predeterminados; ¿por qué estás tratando de obtener titley namede la propiedad de pivote? Usted no dice cuáles son sus "problemas" son, pero espero que sería uno de ellos.

Vea aquí un ejemplo de esta configuración de trabajo: https://implode.io/1OCqbL


En un plano más general, ya que se ha configurado como la relación de muchos a muchos, a obtener las ventajas de la tabla dinámica. En realidad, el libro no será revisado por más de una persona por lo que podría tener sentido para tener un descriptor de acceso establecido como una especie de pseudo-relación:

public function getReaderAttribute()
{
    return $this->readers->first();
}

Ahora se puede hacer referencia a $book->reader->pivotdonde sea apropiado.

Es posible que desee hacer lo mismo con fecha de regreso:

public function getReturndateAttribute()
{
    return $this->reader ? $this->reader->pivot->returndate : null;
}

Así que usted puede conseguir fácilmente la fecha de regreso de un libro que de check out.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=299049&siteId=1
Recomendado
Clasificación