标签: laravel-5

新的 Laravel 项目一次添加多个带有外键的表

我启动了一个运行 5.6 的新 Laravel 应用程序,并在运行 migrate 之前简化我一次创建多个迁移的过程。我有大量的外键用于链接以使我的数据库易于扩展。

我的问题是尝试在迁移后期出现的数据库中引用外键。我相信它不起作用,因为我尝试引用的表尚未按操作顺序创建。

例如: create_users_table迁移:

$table->increments('id');
$table->string('name');
$table->string('email')->unique();
$table->string('password');

$table->integer('user_id')->nullable()->unsigned();
$table->foreign('user_id')->references('id')->on('users');

$table->integer('type_id')->nullable()->unsigned();
$table->foreign('type_id')->references('type_id')->on('types');

$table->integer('post_id')->nullable()->unsigned();
$table->foreign('post_id')->references('post_id')->on('posts');

$table->rememberToken();
$table->timestamps();
Run Code Online (Sandbox Code Playgroud)

例如:create_types_table迁移:

            $table->increments('id');
            $table->string('type');

            $table->integer('user_id')->nullable()->unsigned();
            $table->foreign('user_id')->references('user_id')->on('users')->nullable();

            $table->integer('revenue_id')->nullable()->unsigned();
            $table->foreign('revenue_id')->references('revenue_id')->on('revenue')->nullable();

            $table->integer('hours_id')->nullable()->unsigned();
            $table->foreign('hours_id')->references('hours_id')->on('hours')->nullable();

            $table->integer('project_id')->nullable()->unsigned();
            $table->foreign('project_id')->references('project_id')->on('projects')->nullable();

            $table->integer('type_id')->nullable()->unsigned();
            $table->foreign('type_id')->references('id')->on('types');
            $table->timestamps();
Run Code Online (Sandbox Code Playgroud)

我在所有表格中都遵循这种相同类型的模式。我想我的问题是;这是因为表还没有创建,所以没有什么可参考的吗?有没有办法解决这个问题,或者我是否需要重新启动,创建所有表,然后为每个表添加另一个迁移以添加外键?

这可能是一个愚蠢的问题,我对 Laravel 还很陌生。这是我第一次尝试在早期将关系添加到应用程序中。

php laravel laravel-5

0
推荐指数
1
解决办法
3072
查看次数

Laravel 自定义验证规则适用于不需要的空字段

我有必需的文件字段,它作为路径记录在数据库中。如果它在数据库中的字段为空,我想使它成为可选的必需项。在update我的控制器的操作中,我设置了以下验证:

$this->validate(request(),[
    'drawings' => 'requiredIfEmpty:'.$product->drawings.'|file|max:'. config('fox.photoMaxSize').'|mimes:pdf',
Run Code Online (Sandbox Code Playgroud)

然后在app/Providers/AppServiceProvider.php我定义的requiredIfEmpty验证器中:

Validator::extend('requiredIfEmpty',function ($attribute,$value,$parameters,$validator){
        if(is_null($parameters[0]) || empty($parameters[0])){
            if (is_null($value)){
                return false;
            }
        }
        return true;
    });

    Validator::replacer('requiredIfEmpty', function ($message, $attribute, $rule, $parameters) {
        return __('The :attr is required',['attr' => $attribute]);
    });
Run Code Online (Sandbox Code Playgroud)

在视图中,_form我使用表单助手,如下所示drawings

<div class="form-group {{$errors->first('drawings','has-error')}}">
    @if (!is_null($product->drawings))
    <a href="{{$product->drawings}}" target="_bfox"><img src="/imgs/pdf.png" alt="{{__('PDF File')}}" title="{{__('PDF File')}}" /></a>
    <br>
    @else
    <img src="/imgs/empty.png" width="64" height="64" alt="{{__('Empty')}}..." title="{{__('Empty')}}..." /> <br>
    @endif
    {!! Form::label('drawings', __('Drawings')) !!}        

        {!! Form::file('drawings',['class' …
Run Code Online (Sandbox Code Playgroud)

php laravel laravel-5

0
推荐指数
1
解决办法
1823
查看次数

使用 Laravel 将日期值插入日期字段

目前,我在表单上有一个日期字段,我希望能够插入正在编辑的当前记录的当前值。我的 MySQL 数据库中没有记录缺少此日期字段,但由于某种原因,记录的值实际上不会加载到字段输入中,但它会加载到输入字段的“值”部分。

目前这里是我的领域的代码:

<input type="date" name="date" id="date" class="form-control" style="width: 100%; display: inline;" onchange="invoicedue(event);" required value="{{$shipment->date}}">
Run Code Online (Sandbox Code Playgroud)

这是代码输出:

<input name="date" id="date" class="form-control" style="width: 100%; display: inline;" onchange="invoicedue(event);" required="" value="2018-05-10 00:00:00" type="date">
Run Code Online (Sandbox Code Playgroud)

但这就是我的浏览器中的样子:

在此处输入图片说明

但是在我的 MySQL 数据库表中,该字段(这是一个日期字段)的格式如下:2018-05-12

mysql laravel laravel-5

0
推荐指数
1
解决办法
1万
查看次数

Laravel 中的协议错误

我正在使用Laravel 5.6.23

这是我的错误信息:

UnexpectedValueException    
There is no existing directory at "C:\timereg-project\Laravel\storage\logs" and its not buildable: Protocol error
Run Code Online (Sandbox Code Playgroud)

目录日志确实存在于我的 Laravel 项目中。我试过这个不起作用:

php artisan cache:clear
php artisan clear-compiled
Run Code Online (Sandbox Code Playgroud)

我试过这个也不起作用:

composer dump-autoload
Run Code Online (Sandbox Code Playgroud)

如果我试试这个:

sudo chmod -R 777 storage
sudo chmod -R 777 storage
Run Code Online (Sandbox Code Playgroud)

我得到错误

chmod: cannot access 'Laravel/storage/logs': no such file or directory
Run Code Online (Sandbox Code Playgroud)

不起作用的命令:

composer update
Run Code Online (Sandbox Code Playgroud)

我该怎么办?感觉就像我被日志文件夹完全阻止了。

完整的错误信息

protocols chmod laravel laravel-5 laravel-artisan

0
推荐指数
1
解决办法
1470
查看次数

在 Laravel 中使用 WhereBetween 进行条件查询

对于一个小的搜索块表单,我有以下控制器功能部分:

    $manifests = DB::table('carrier_manifests')
        ->join('customers', 'carrier_manifests.carrierOrigin', '=', 'customers.id')
        ->select('carrier_manifests.*', 'customers.customer_name')          
        ->where([
                    ['manifestNumber', 'LIKE', '%' . $manifest . '%'],
                    ['originTerminal','LIKE','%' . $terminal . '%'],
                    ['carrierOrigin', $direction[0], $direction[1]],
                ])
        ->whereNull('deleted_at')
        ->orderBy('dateUnloaded', 'DESC')
        ->whereBetween('dateUnloaded', [$startDate, $endDate])
        ->limit(100)
        ->get();
Run Code Online (Sandbox Code Playgroud)

它的每个部分都正常工作,除了一个部分, the whereBetween,由于工作流程的必要性,有时dateUnloaded没有为 each 填写 in 子句carrier_manifest,这意味着如果该dateUnloaded字段为空,它将被排除在搜索结果之外。

是否有关于如何包含那些缺少的结果的建议dateUnloaded

laravel eloquent laravel-5

0
推荐指数
1
解决办法
905
查看次数

Laravel 5.6 - 仅在更改时保存值

我有一个 Laravel 5.6 项目,正在尝试从这样的表单更新帖子

<input name="email" type="text" class="form-control" placeholder="Email" value="{{$user->email}}" required>
Run Code Online (Sandbox Code Playgroud)

在我的 PostsController 我有这个......

    if($request->input('email')) {
        $user->email = $request->input('email');
    }
Run Code Online (Sandbox Code Playgroud)

我希望它仅在表单中输入了新电子邮件时才更新电子邮件,但是因为我预先填充了表单字段,所以它总是通过 IF。

有没有更多的 Laravel 方法来做到这一点?我看过 isDirty() 但我不确定它是否正确使用。

php laravel laravel-5

0
推荐指数
1
解决办法
2735
查看次数

如何将数据库中保存的值显示到所见即所得的 tinymce

显然,我不能使用

<div>
  <label for="description">Description</label>
  <textarea class="form-control" id="description"  name="description" rows="3" value="{{ $product->description }}"></textarea>
</div>
Run Code Online (Sandbox Code Playgroud)

现在我正在使用 WYSIWYG(tinymce),它可以textarea单独使用,但是将 WYSIWYG 集成在 a 中textarea,不。如何description在 WYSIWYG 中显示 的值?我必须使用 Javascript 吗?

php wysiwyg laravel-5

0
推荐指数
1
解决办法
234
查看次数

Laravel Nova: Select-Field 与其他模型

有没有办法用其他模型创建一个选择字段?例如 User::all()?

解决方法: 选择字段

在应用程序中,我想从可用用户中进行选择:

Laravel 新星: 选择用户

php laravel laravel-5 laravel-nova

0
推荐指数
1
解决办法
5516
查看次数

使用数据透视表获取额外属性?

我正在关注 Laracasts 上的多对多关系 Laravel 教程 - https://laracasts.com/series/laravel-5-fundamentals/episodes/21

我对自己的挑战是,我创建了数据透视表article_tag) to keep track of the many to many relations. Articles can have many tags, and tags can have many articles. So I can run同步etc to associatetagX tagY tagZ article1` to。但是,我也希望能够选择将关联标签之一设置为“isGreenTag”。我可以在跟踪多对多关系的数据透视表中执行此操作吗?我可以添加一列“is_green_tag”吗?

这是我的Article班级关系:

class Article extends Model {
   public function tags() {
      return $this->belongsToMany('App\Tag')->withTimestamps();
   }
}
Run Code Online (Sandbox Code Playgroud)

这是我的Tag班级关系:

class Tag extends Model {
   public function articles() {
      return $this->belongsToMany('App\Articles');
   }
}
Run Code Online (Sandbox Code Playgroud)

这是我对数据透视表的迁移:

public function up() { …
Run Code Online (Sandbox Code Playgroud)

laravel laravel-5 laravel-5.7

0
推荐指数
1
解决办法
1136
查看次数

Laravel 5.7:找不到类“App\Http\Controllers\MailableClass”

我创建了一个名为 Class UserRequest 的 Mailable 我试图从控制器内部调用它,这是我得到的错误:

找不到类“App\Http\Controllers\UserRequest”

我也试过了,->send(new \UserRequest($msgdata));但还是不行。

控制器:

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Mail;


class ContactController extends Controller
{

    public function index()
    {
        return view('contact');
    }


    public function sendemail(Request $request)
    {
        $msgdata = array('subject'=>$request->subject,'email'=>$request->email, 'name'=>$request->name,'body'=>$request->body);

        try
        {
            Mail::to('dddddddd@dddsdsf.com')
            ->send(new UserRequest($msgdata));
        }
        catch(Exception $e)
        {

        }
    }
}
Run Code Online (Sandbox Code Playgroud)

php email controller laravel laravel-5

0
推荐指数
1
解决办法
6246
查看次数