Я написал код, изучив видеоурок по php/laravel. но результат не тот. шаг проблемы:
в этой функции используйте следующий код:
use Illuminate\Database\Eloquent\Model;
class Question extends Model
{
public function add_question(){
$this->title = rq('title');
$this->user_id = session('user_id');
if (rq('description'))
$this->desc = rq('description');
$result = $this->save();
//dump($result);
return( $result)?
['status'=> '1' , 'id'=>$this->id] :
['status'=> '0' , 'message'=>'db save fail'];
}
}
запустить в браузере http://localhost/api/question/add?title=rrrrr&description=tttttt и проверь бд, будет две одинаковые записи. как ниже:
id title descdescription user_id status created_at updated_at
12 rrrrr tttttt 18 ok 2019/4/7 16:55 2019/4/7 16:55
13 rrrrr tttttt 18 ok 2019/4/7 16:55 2019/4/7 16:55
это не тот результат, что в видеоуроке.
rq() находится в web.php
function rq($key=null, $default=null){
if (!$key)return Request::all();
return Request::get($key,$default);
}
function question_ins(){
return new App\Question;
}
Route::any('api/question/add', function () {
return(question_ins()->add_question());
});
привет mdexp, я добавляю целую функцию. пожалуйста, взгляните. Спасибо
Не могли бы вы предоставить действие контроллера или закрытие/функцию маршрута (если она у вас есть), которая вызывает метод add_question. Тернарный оператор (с использованием ? и :) аналогичен условному оператору (с использованием if и else) с точки зрения программирования, поэтому ваш код будет работать одинаково в обоих случаях. Также, где определена функция rq()? Учебное пособие, которому вы следуете, похоже, не поможет вам сделать все правильно, потому что в целом метод add_question не должен быть частью вашего класса модели.
привет Богдан, ты прав, я снова тестирую и нахожу разницу. пожалуйста, проверьте обновленный вопрос. Будет ли это связано с браузером? Но я проверяю это с помощью ie и chrome, у обоих такая же проблема.
OMG, он действует по-разному в разных браузерах. Проверяю Мозилой, этого не будет, почему?
если я добавлю «dump($result);», он может работать правильно на ie и chrome, но независимо от того, добавляю dump() или нет, он может хорошо работать на Mozilla. Кто-нибудь знает, в чем проблема?
Не могли бы вы предоставить ссылку на учебник, который вы следуете.
извините, это китайский сайт, и это платное видео. код тот же, но учитель использует компьютер Mac.
Добро пожаловать JS в Stack Overflow! Как отметил @Bogdan, есть подозрение, что ваш учебник не направляет вас по правильному пути. Я рекомендую прочитать о приложениях CRUD и RESTful.
Что касается вашего вопроса, Документы Laravel по вставке и обновлению моделей Eloquent должен помочь вам здесь.






create a db table named questions and a model named Question.
Прочтите об определении моделей здесь
Из вашего интерфейса командной строки:
php artisan make:model Question --migration
Отредактируйте модель вопроса:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Question extends Model
{
// Just tweak this for whatever your Model looks like
protected $fillable = [
'subject',
'body',
'author'
];
}
Отредактируйте миграцию create_questions_table:
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateQuestionsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('questions', function (Blueprint $table) {
$table->increments('id');
$table->string('body');
$table->string('subject');
$table->string('author');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('questions');
}
}
Из вашего CLI запустите php artisan migrate
add a function to save data into db.
Ознакомьтесь с Документы Laravel о контроллерах и о том, что вы можете с ними делать.
Снова из вашего CLI:
php artisan make:controller QuestionController
ВопросКонтроллер:
<?php
namespace App\Http\Controllers;
use App\Question;
use Illuminate\Http\Request;
class QuestionController extends Controller {
public function store( Request $request )
{
// Create a new instance of your Question Model
//modify input param .
$question = App\Question::firstOrNew([
'body' => $request->body,
'subject' => $request->subject,
'author' => $request->author
]);
// Then save it to the database
$question->save();
return back()->with('success', 'Question posted');
}
}
Вопрос.blade.php
<form method = "POST" action = "/question">
@csrf
<input type = "text" name = "body" id = "body" class = "form-control">
<input type = "text" name = "subject" id = "subject" class = "form-control">
<input type = "text" name = "author" id = "author" class = "form-control">
<button class = "btn btn-primary">Ask Question</button>
</form>
@if ( session('success') )
<div class = "alert alert-success">
<h3>Question asked!</h3>
</div>
@endif
Маршруты/web.php
Route::post('/question', QuestionController@store)->name('ask-question');
привет, спасибо за вашу помощь, я следую вашей инструкции. это работает хорошо.
привет, @UkraineInTheMembrane, правильно ли я изменил входной параметр firstOrNew() на следующий: $question = Question::firstOrNew(['body' => $request->body, 'subject' => $request->subject , 'автор' => $request->author] ); Я получил ошибку вставки БД, используя ваш код. после его изменения. он хорошо вставляет БД.
Конечно @JS! Это была моя ошибка - я отредактирую свой ответ. Вы можете прочитать больше здесь об использовании Eloquent для вставки/создания записей.
Привет, @JS - если это решило твою проблему, не мог бы ты принять ответ? Очень признателен!
Не могли бы вы предоставить больше контекста о том, где используются эти условные выражения?