Я работаю над библиотечным приложением и хочу создать функцию, в которой пользователь может получить книгу для покупателя. Итак, у меня есть 2 таблицы, books
и readers
, и я создал сводную таблицу, которая также называется book_reader
, чтобы создать метод оформления заказа. Однако у меня есть некоторые проблемы с отображением данных из этой таблицы. Я прочитал несколько статей по этому поводу, но они не принимают во внимание, что в сводной таблице есть некоторые данные, которые содержат новую информацию, а не только объединение двух таблиц. Я был бы очень признателен, если бы кто-то мог помочь мне с тем, как я могу отобразить эти данные.
Модели:
<?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",
];
}
Миграции:
<?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>