php - Laravel 播种机偶尔会跳过记录

标签 php mysql laravel eloquent

我在两个模型(联系人和用户)上设置了一对一的关系。在意识到某些联系人没有与他们关联的用户后,我尝试编写一个播种器来捕获所有这些情况并创建用户模型并将其与联系人关联。但是,此脚本每次只能捕获大约一半的联系人。重复运行它最终会完成工作,但我想知道是什么原因造成的。

型号:

use Cartalyst\Sentry\Users\Eloquent\User as SentryUserModel;
class User extends SentryUserModel {
    public function contact()
    {
    return $this->hasOne('Contact');
    }
}
class Contact extends AppModel {
    protected $table = 'contacts';
    public function user()
    {
        return $this->belongsTo('User');
    }
}

这是正在运行的播种器:

public function run()
{
    $contacts = Contact::all();


    foreach($contacts as $contact)
    {
        $user = $contact->user;

        if(!$user))
        {
            //Logic for creating and associating new user with contact
            //This is only being hit for about half of the contacts without a user_id in the db.
            Log::info('Found a contact without a user.');
        }
    }
}

我们希望此播种程序捕获所有没有用户的联系人,然后执行创建用户逻辑,但它捕获大约一半的没有用户的联系人,并正确创建和关联新用户。任何有关为什么会发生这种情况的见解都将不胜感激。提前致谢!

最佳答案

您可以使用doesntHave()方法。 看看Querying Relationship Absence

public function run()
{
    $total_contacts = Contact::count();
    $total_contacts_with_user = Contact::has('user')->count();
    $total_contacts_without_user = Contact::doesntHave('user')->count();

    Log::info('Total contacts: ' . $total_contacts);
    Log::info('Total contacts with user: ' . $total_contacts_with_user);
    Log::info('Total contacts without user: ' . $total_contacts_without_user);

    Log::info('Check if this is true: ' . $total_contacts_with_user . ' + ' . $total_contacts_without_user . ' = ' . $total_contacts);
}

如果一切正常,并且有您期望的所有联系人,请通过以下方式获取没有用户的联系人:

$contacts_without_user = Contact::doesntHave('user')->get();

并执行创建新用户并将其与联系人逻辑关联

关于php - Laravel 播种机偶尔会跳过记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56508912/

相关文章:

php - 我在尝试获取 Laravel 中列的属性时遇到问题

php - 替换 PHP 字符串中的特殊字符的问题

php - 下载csv中的数据库记录但得到空白行

PHP cookie 不是在 ajax 处理脚本中创建的

php - 如何检查用户名和密码是否与数据库值匹配

phpmyadmin 查询与 mysql 搜索表单和特殊字符

php - 在 Laravel 中将固定变量从路由传递到 Controller

laravel - 从Laravel Cashier获取下一个账单日期

php - 为什么 PHP 数组示例会留下逗号?

php - 如何在 mysql 数据库表中获取第一个和最后一个日期