首页 > 解决方案 > Laravel Sqlite 外键

问题描述

我正在尝试将数据添加到名为 Booking 的 sqlite 数据库表中。

这需要通过 Rego 列链接到我的名为 Vehicle 的表。我已将此添加为外键。

谁能帮我解释为什么我不能达到这个结果?我目前收到以下错误:

SQLSTATE[HY000]:一般错误:1 个外键不匹配 - “Booking”引用“Vehicle”(SQL:插入 Booking(rego,first_last,start_time,finish_time)值(744HGB,Franklin Monkie,hhhh,hhhh))

看我的代码。

HTML:

<form method="post" action="{{url("book_vehicle_action")}}">
    {{csrf_field()}}
    <select name="first_last">
        @foreach($clients as $client)
            <option>{{$client->First_Last}}</option>
        @endforeach
    </select>

    <select name="rego">
        @foreach($vehicles as $vehicle)
            <option>{{$vehicle->Rego}}</option>
        @endforeach
    </select>

    <br>

    <p>
        <label> Start Date and Time (DD/MM/YY HH:MM:SS) <label> <br>
        <input type="text" name="start_time"> 
    </p>
    
    <p>
        <label> Start Date and Time (DD/MM/YY HH:MM:SS) <label> <br>
        <input type="text" name="finish_time"> 
    </p>

    <input type="submit" value="book">

</form>

路线:

Route::get('/book_vehicle', function() {
    $sql = "select * from Client";
    $sql2 = "select * from Vehicle";
    $vehicles = DB::select($sql2);
    $clients = DB::select($sql);
    return view('book_vehicle')
        ->with('clients', $clients)
        ->with('vehicles', $vehicles);
});

Route::post('book_vehicle_action', function() {
    $rego = request('rego');
    $first_last = request('first_last');
    $start_time = request('start_time');
    $finish_time = request('finish_time');
    $bookingID = book_vehicle($rego, $first_last, $start_time, $finish_time);
    return redirect(url("/"));
});

function book_vehicle($rego, $first_last, $start_time, $finish_time) {
    $sql = "insert into Booking (rego, first_last, start_time, finish_time) values (?, ?, ?, ?)";
    DB::insert($sql, array($rego, $first_last, $start_time, $finish_time));
    $bookingID = DB::getPdo()->lastInsertId();
    return($bookingID);
}

D B:

CREATE TABLE IF NOT EXISTS Booking (
    BookingID INTEGER NOT NULL PRIMARY KEY autoincrement,
    First_Last VARCHAR(24) NOT NULL,
    Start_Time VARCHAR(12) NOT NULL,
    Finish_Time VARCHAR(12) NOT NULL,
    Rego VARCHAR(12) REFERENCES Vehicle(Rego)
);

CREATE TABLE IF NOT EXISTS Vehicle (
    VehicleID INTEGER NOT NULL PRIMARY KEY autoincrement,
    Rego VARCHAR(12) NOT NULL,
    Make VARCHAR(12),
    Model VARCHAR(12) NOT NULL,
    Age INT(4),
    Odometer VARCHAR(12) NOT NULL
);

CREATE TABLE IF NOT EXISTS Client (
    License_No CHAR(12) PRIMARY KEY NOT NULL,
    First_Last VARCHAR(24) NOT NULL,
    DOB INT(4) NOT NULL,
    License_Type CHAR NOT NULL,
    PhoneNo VARCHAR(12)
);

INSERT INTO Booking(BookingID, First_Last, Start_Time, Finish_Time, Rego)
    VALUES
    (1, "Thomas Salad" , "2021-09-16 12:00:00", "2021-010-16 12:00:00", "744HGB")

INSERT INTO Vehicle(VehicleID, Rego, Make, Model, Age, Odometer)
    VALUES
    (3, "744HGB", "Volkswagon", "Jetta", 2009, 68909);

标签: phplaravel

解决方案


推荐阅读